首页 »VB教程 » windowsapi函数:Windows API一日一练(9)WindowProc和DefWindowProc函数 »正文
windowsapi函数:Windows API一日一练(9)WindowProc和DefWindowProc函数
来源: 发布时间:星期一, 2009年9月28日 浏览:2次 评论:0
在Windows操作系统里 当窗口显示的后 它就可以接收到系统源源不断地发过来 消息 然后窗口就需要处理这些消息 因此就需要 个 来处理这些消息 在API里定义了 个 为回调 当系统需要向窗口发送消息时 就会 窗口给出 回调 WindowProc 如果WindowProc 不处理这个消息 就可以把它转向DefWindowProc 来处理 这是系统 默认消息处理 当你按下菜单 或者点击窗口时 窗口需要运行这个消息处理 WindowProc声明如下: LRESULT CALLBACK WindowProc( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam ); hwnd是当前窗口 句柄 uMsg是系统发过来 消息 wParam是消息参数 lParam是消息参数 这个 定是静态 也就是全局 在编译时已经确定了地址 由于它需要设置在注册 窗口类型里 如下: #008 ATOM MyRegisterClass(HINSTANCE hInstance) #009 { #010 WNDCLASSEX wcex; #011 #012 wcex.cbSize = (WNDCLASSEX); #013 #014 wcex.style = CS_HREDRAW | CS_VREDRAW; #015 wcex.lpfnWndProc = WndProc; 第15行就是设置窗口 消息处理 DefWindowProc声明如下: LRESULT DefWindowProc( HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam ); 这个 参数跟上面那个 是 样 只不过 它是处理所有默认 消息 这两个 例子如下: #001 // #002 // : WndProc(HWND, UINT, WPARAM, LPARAM) #003 // #004 // 目: 处理主窗口消息. #005 // #006 // 蔡军生 2007/07/12 #007 // #008 LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) #009 { #010 wmId, wmEvent; #011 PAINTSTRUCT ps; #012 HDC hdc; #013 #014 switch (message) #015 { #016 WM_COMMAND: #017 wmId = LOWORD(wParam); #018 wmEvent = HIWORD(wParam); #019 // 菜单选项命令响应: #020 switch (wmId) #021 { #022 IDM_ABOUT: #023 DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); #024 ; #025 IDM_EXIT: #026 DestroyWindow(hWnd); #027 ; #028 default: #029 DefWindowProc(hWnd, message, wParam, lParam); #030 } #031 ; #032 WM_PAINT: #033 hdc = BeginPa(hWnd, &ps); #034 // #035 EndPa(hWnd, &ps); #036 ; #037 WM_DESTROY: #038 PostQuitMessage(0); #039 ; #040 default: #041 DefWindowProc(hWnd, message, wParam, lParam); #042 } #043 0; #044 } 第8行定义消息处理 第14行开始根据区别 消息作处理 第29行和第41行都是 DefWindowProc 来处理未处理 消息 有了窗口消息处理 就可以响应区别 消息 实现各种各样 功能
相关文章
读者评论
发表评论
|
|