曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 3489|回复: 0
打印 上一主题 下一主题

DefWindowProc() -- 默认窗口处理函数

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34395
跳转到指定楼层
楼主
发表于 2012-2-7 02:15:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
DefWindowProc() 函数原型如下:
[C++] 纯文本查看 复制代码
LRESULT DefWindowProc( 
  HWND hWnd, 
  UINT Msg, 
  WPARAM wParam, 
  LPARAM lParam 
);

通常窗口会收到许多消息,但是消息处理函数不一定要每个都需要处理,有些消息可能只需要直接让系统来处理即可。DefWindowProc() 的作用就是处理窗口消息处理函数没有处理完,或者不需要处理的函数。实际上许多程序员没有关注的消息都是由该函数来处理的。如果在消息处理函数中不把消息交给 DefWindowProc() 来处理,那么对窗口的动作几乎不会有响应,包括窗口的移动,关闭,甚至许多窗口的样式都不能显示。

一般情况下,除非一个消息不再需要 DefWindowProc() 来处理,那么最好还是将没有处理的消息统一交由它来处理。

比如在一个程序中,WinMain() 里仅创建 DialogBoxParam()  函数来生成一个对话框,比如如下使用:
DialogBoxParam (hInstance, MAKEINTRESOURCE(IDD_MAINDLG), NULL, MainDlg, NULL);
其中 MainDlg() 就是对话框处理函数,在该函数中,我们处理了 WM_INITDIALOG 初始化对话框消息,如:
case WM_INITDIALOG:
        SendMessage(hDlg,WM_SETICON,ICON_BIG,LPARAM(LoadIcon(hInst,MAKEINTRESOURCE(IDI_ICON1)))); //设置图标
其中,使用了 SendMessage() 函数直接向对话框发送 WM_SETICON 消息,根据 MSDN 中对 SendMessage() 函数的描述:
SendMessage calls the window procedure for the specified window and does not return until the window procedure has processed the message.
上面所述的意思是:SendMessage() 调用窗口处理程序来处理指定的窗口并且知道窗口处理程序处理完消息后才会返回。
这里,由于我们不在上述的程序中显示定义 WM_SETICON 消息的窗口处理函数,那么 SendMessage() 函数所调用的窗口处理函数即是 DefWindowProc() 。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2025-5-3 11:46 , Processed in 0.063291 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表