关于IsDialogMessage函数的一点疑问,好久没来了,顺便散分。。。
当程序中出现非模态对话框的时候,消息循环必须写成
[code=C]while (GetMessage(&msg, NULL, 0, 0))
{
if (!IsDialogMessage(hDlg1,&msg))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
//}
}
}
return msg.wParam;
}
[/code]
查了MSDN,知道了:
when isdialogmessage processes a message,it checks for keyboard message and converts them into selections for
the corresponding dialog box.
IsDialogMessage是检查对话框上的键盘消息的,我测试了一下:
在键盘上放置3个按钮,OK,BUTTON1,BUTTON2,缺省按钮是OK,三个按钮都有制表符TAB,运行的时候测试结果汇报如下:
当按下键盘上的TAB键焦点会在三个按钮之间进行切换,按下回车或者空格就会触发OK按钮(缺省按钮嘛)来关闭对话框。
当把IsDialogMessage注释掉之后,测试汇报:
此时运行默认焦点还是在OK上(缺省按钮),当按下TAB键时没有任何反应(证明了此函数确实是管理对话框的按键消息的)
当按下回车的时候也没有任何反应,但是,但是,特此强调的是:当按下空格键的时候,会触发消息关闭对话框。
问题来了:既然IsDialogMessage是管理键盘消息的,那按下空格跟按下回车,TAB不都是按键消息(WM_KEYDOWN)吗,为何,回车,TAB都没反应,空格却有反应呢?
特此到论坛求助,欢迎回答,先说谢谢!!!