C++:DefWindowProc()函数
1. 函数概述
DefWindowProc是一个Windows API函数,用于调用默认的窗口过程。它在窗口程序(WndProc)中起到非常重要的作用。当窗口接收到一个消息,而在自定义的窗口过程中没有对该消息进行处理时,就需要调用DefWindowProc来确保窗口能够按照系统默认的方式对消息进行响应。这个函数保证了窗口基本的行为和功能正常,例如窗口的最小化、最大化、关闭等操作的默认行为都是由它来实现的。
2. 函数原型和参数
函数原型如下:
LRESULT DefWindowProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam );
参数说明:
hWnd:接收消息的窗口句柄。这个句柄用于确定是哪个窗口的消息需要调用默认窗口过程。例如,在一个多窗口的应用程序中,通过这个句柄来区分不同窗口的消息处理。
Msg:消息标识符,用于指定消息的类型。常见的消息如WM_CREATE(窗口创建时发送)、WM_DESTROY(窗口销毁时发送)、WM_PAINT(窗口需要重绘时发送)等。这些消息是Windows系统定义的,用于通知窗口各种事件的发生。
wParam:消息的附加信息,其具体含义取决于Msg参数所指定的消息类型。例如,对于WM_COMMAND消息(通常用于菜单、按钮等控件的通知),wParam的低字节可能包含控件的标识符。
lParam:也是消息的附加信息,同样其含义依赖于消息类型。比如在WM_MOUSEMOVE消息(鼠标移动时发送)中,lParam包含了鼠标的位置信息。
3. 返回值
函数返回值是LRESULT类型,这是一个32位的有符号整数。返回值的具体含义取决于发送的消息类型。例如,对于WM_MENUSELECT消息(菜单选择时发送),返回值可能表示选中菜单项的状态;对于WM_ACTIVATE消息(窗口激活或失活时发送),返回值可以表示窗口激活的状态等。
4. 使用示例
以下是一个简单的WndProc(窗口过程函数)示例,其中展示了如何在自定义窗口过程中调用DefWindowProc:
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: // 窗口创建时的处理代码 break; case WM_PAINT: { PAINTSTRUCT ps; HDC hdc = BeginPaint(hWnd, &ps); // 在这里进行窗口绘制的操作 EndPaint(hWnd, &ps); } break; case WM_DESTROY: PostQuitMessage(0); break; default: // 对于未处理的消息,调用默认窗口过程 return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
在这个示例中,WndProc是自定义的窗口过程函数。当接收到WM_CREATE消息时,可以进行窗口初始化相关的操作;当接收到WM_PAINT消息时,进行窗口绘制;当接收到WM_DESTROY消息时,发送退出消息。对于其他未处理的消息,通过调用DefWindowProc来确保窗口的正常行为。例如,如果没有处理WM_NCHITTEST(非客户区鼠标命中测试)消息,而不调用DefWindowProc,可能会导致窗口无法正常拖动、缩放等操作。
C++编程API库
- C++:API(仅展示平时要用的)
- C++:Win32 桌面应用程序
- C++:WinMain()函数
- C++:WNDCLASSEX 窗口类结构体
- C++:LoadIcon()函数
- C++:LoadCursor()函数
- C++:RegisterClassEx()函数
- C++:CreateWindowEx()函数
- C++:ShowWindow()函数
- C++:UpdateWindow()函数
- C++:GetMessage()函数
- C++:MSG 消息结构体
- C++:TranslateMessage()函数
- C++:DispatchMessage()函数
- C++:WndProc()窗口过程函数
- C++:GetModuleHandle()函数
- C++:DestroyWindow()函数
- C++:DefWindowProc()函数
- C++:SendMessage()发送消息函数
- C++:FindWindow()函数
- C++:FindWindowEx()函数
- C++:EnumWindows()函数
- C++:EnumWindowsProc()函数
- C++:GetWindowText()函数
- C++:SetWindowText()函数
- C++:GetDlgltem()取控件句柄函数
- C++:GetDlgCtrllD()取控件ID函数
- C++:GetDlgltemText()取对话框控件文本函数
- C++:SetDlgltemText()设置对话框控件文本函数
- C++:GetDlgltemlnt()取对话框控件整数函数
- C++:SetDlgltemlnt()设置对话框控件的整数值函数
- C++:DialogBox()模态对话框函数
- C++:DialogBoxParam()创建模态对话框函数
- C++:MessageBox()显示消息框函数
- C++:DefDlgProc()对话框过程函数
- C++:MessageBoxIndirect()显示消息框函数
- C++:EndDialog()结束模态对话框函数
- C++:OpenClipboard()打开剪贴板函数
- C++:GetClipboardData()获取剪贴板数据函数
- C++:SetClipboardData()设置剪贴板数据函数