今天修改了一下cmnhdr.h的chhandle_dlgmsg宏,编译通过了.
1.窗口过程返回lresult(即long);对话框过程返回bool(即int,不过vc.net自动生成的代码为lresult.); 【程序编程相关:使用directShow播放mpeg的基】
消息处理宏handle_msg只能用于窗口过程,不能用于对话框过程.首先看窗口过程与对话框过程的差别: 【推荐阅读:Windows CE 开发初步 】
wm_ctlcolormsgbox 【扩展信息:从Windows消息的角度看窗口应用程序】
2.窗口过程处理完一条消息后,一般返回0;而对话框过程一般处理完一条消息后,返回true,如果不处理则返回false,由对话框管理器执行默认操作.但以下几条消息例外,对它们处理完后要返回特定值:
...
wm_initdialog
所以设计用于窗口过程的handal_wm_*一般返回0,如把它用于对话框过程,反而表示对话框过程未处理由系统自行默认操作.改正的方法是改为返回true即可.但是对于上边所说的要返回特定值得消息,返回值要保持不变.
知道了上边的区别,我们就可以设计专用与对话框过程的消息处理宏了.
作者的设计是利用了setdlgmsgresult,比较简洁,但初学者就头疼了:// the normal handle_msg macro in windowsx.h does not work properly for dialog// boxes because dlgproc return a bool instead of an lresult (like// wndprocs). this chhandle_dlgmsg macro corrects the problem:#define chhandle_dlgmsg(hwnd, message, fn) \ case (message): return (setdlgmsgresult(hwnd, umsg, \ handle_##message((hwnd), (wparam), (lparam), (fn))))*/
... 下一页