IsDialogMessage的函数原型为BOOL IsDialogMessage(HWND hDlg,LPMSG IpMsg);
定义
函数功能:该函数决定一个消息是否指定给指定的对话框,如果是,则处理消息。 函数原型:BOOL IsDialogMessage(HWND hDlg,LPMSG IpMsg);
参数
hDlg:标识对话框。
IpMsg:指向一个含有将被检测的消息的MSG结构。
返回值:如果消息被处理,则返回值为非零值;如果消息没有被处理,则返回值为零。
备注:尽管IsDialogMessage函数是为无
模态对话框而扩展的,但可以用含有控制的任何一个窗口来使用它。当 IsDialogMessage处理一个消息时,它检测键盘信息并把它们转变成对响应对话框的选择命令。例如当按下tab时选择下一个控制或控制组,当按下down时选择控制组的下一个控制。因为IsDialogMessage 函数要执行消息所有必要的转变和传送,IsDialogMessage函数处理的消息不必传送给TranslateMessage或 DispatchMessage函数处理。 IsDialogMessage函数把WM_GETDLGETDLGCODE发送到对话框应用程序,决定应该处理哪个键。 lsDialogMessage函数把DMa_ETDEFID和DM_SETDEFID消息发送到窗口。这些消息在WINUSERH头文件中定义为WM_USER和WM_USER+1所以就有与应用程序定义的有一样值的消息发生冲突。
速查:Windows NT: 3.1及以上版本;Windows:95及以上版本;Windows CE:1.0及以上版本;
头文件:winuser.h; 库文件:user32.lib:Unicode:在Windows NT上实现为Unicode和ANSI两种版本。
检测该消息是否是对应句柄的对话框消息,如果是,则交个user32.dll模块对齐进行处理,实际上user32.dll模块将其转发给对话框所属的
窗口函数了,在对话框所属的窗口函数里面对消息进行判断,最终调用消息对应的函数,而消息对应的函数是我们之前映射好的,已经存在于对话框消息映射表了。
例子
while(GetMessage(&stMsg,NULL,0,0))
{if(!IsDialogMessage(hDlg,&stMsg)){TranslateMessage(&stMsg);DispatchMessage(&stMsg);}
}