Windows API一日一练 9 WindowProc和DefWindowProc函数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Windows API一日一练 9 WindowProc和DefWindowProc函数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2727字,纯文字阅读大概需要4分钟。
内容图文
在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 = sizeof(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??int wmId, wmEvent; #011??PAINTSTRUCT ps; #012??HDC hdc; #013? #014??switch (message) #015??{ #016??case WM_COMMAND: #017???????? wmId??? = LOWORD(wParam); #018???????? wmEvent = HIWORD(wParam); #019???????? // 菜单选项命令响应: #020???????? switch (wmId) #021???????? { #022???????? case IDM_ABOUT: #023?????????????? DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About); #024?????????????? break; #025???????? case IDM_EXIT: #026?????????????? DestroyWindow(hWnd); #027?????????????? break; #028???????? default: #029?????????????? return DefWindowProc(hWnd, message, wParam, lParam); #030???????? } #031???????? break; #032??case WM_PAINT: #033???????? hdc = BeginPaint(hWnd, &ps); #034???????? // #035???????? EndPaint(hWnd, &ps); #036???????? break; #037??case WM_DESTROY: #038???????? PostQuitMessage(0); #039???????? break; #040??default: #041???????? return DefWindowProc(hWnd, message, wParam, lParam); #042??} #043??return 0; #044?} 第8行定义消息处理函数 第14行开始根据不同的消息作处理。 第29行和第41行都是调用DefWindowProc函数来处理未处理的消息。 ? 有了窗口消息处理函数,就可以响应不同的消息,实现各种各样的功能。 ?再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow
内容总结
以上是互联网集市为您收集整理的Windows API一日一练 9 WindowProc和DefWindowProc函数全部内容,希望文章能够帮你解决Windows API一日一练 9 WindowProc和DefWindowProc函数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。