读书人

win32程序 讯息疑问(对话框程序不需要

发布时间: 2013-01-11 11:57:35 作者: rapoo

win32程序 消息疑问(对话框程序不需要处理WM_PAINT或WM_DESTROY讯息。对话框程序不接收WM_CREAT讯息,而是在特殊的WM_INITDI)
《Windows程序设计》一书中
第十一章:对话框程序不需要处理WM_PAINT或WM_DESTROY消息。对话框程序不接收WM_CREAT消息,而是在特殊的WM_INITDIALOG讯息处理期间,对话框程序执行初始化操作。
我疑问:
1、为啥不需要需要处理WM_PAINT或WM_DESTROY消息?
尤其是WM_PAINT消息,如果我想在对话框上面作图,我不处理WM_PAINT,怎么绘图?
对于WM_DESTROY消息,对话框在销毁之前不通知自己么?就像普通的窗口一样?
2、对话框程序不接收WM_CREAT消息?
对话框也是窗口,应该都会收到WM_CREAT消息啊,为什么对话框收不到呢?
3、一般的窗口处理消息后,return 0(false);但是对话框处理消息后,return true(非0),为什么处理方式不一样呢?
[解决办法]
1. 误导人的。你可以处理WM_PAINT消息,也可以处理WM_DESTROY消息
2. 这里的对话框程序应该是指DialogProc,对话框的窗口过程函数默认是DefDlgProc,
DefDlgProc会接收到并处理WM_CREATE消息,例如根据对话框模板创建控件等
DialogProc不会接收到WM_CREATE消息,因为DialogProc是由DefDlgProc调用的,会不会让DialogProc接收到WM_CREATE消息由DefDlgProc决定
3. DefDlgProc内部处理消息后一般也是return 0; DefDlgProc调用DialogProc后会根据DialogProc的返回值来决定是否作默认处理
[解决办法]
1.DialogProc 是对话框 对话过程
2.DefDlgProc 才是对话框消息处理过程。
2个 不是 一会 事

读书人网 >VC/MFC

热点推荐