我正在开发一个带有CreateWindowEx()
创建的简单对话框的Windows项目,它包含多个加载了CreateDialog()
的窗格,用于从资源文件加载布局。在儿童窗格上有许多控件,包括文本框和按钮,我想使用TAB来导航,但我得到的只是Windows'bing'告诉我键没有做任何事情。我的消息循环如下所示:
while( PeekMessage(&msg, 0, 0, 0, PM_REMOVE) )
{
if( !IsDialogMessage(0, &msg) )
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
每个控制窗口都在样式中设置了WS_TABSTOP,并且设置了WS_EX_CONTROLPARENT的所有者窗格。
我还需要做些什么来使Tab键工作吗?
谢谢, Ĵ
答案 0 :(得分:3)
试试这个:
http://support.microsoft.com/kb/71450(如何使用一个IsDialogMessage()调用多个无模式对话框)
您的窗格是无模式对话框,IsDialogMessage负责处理Tab键。我希望这篇文章完全符合你的情况。
答案 1 :(得分:2)
WS_TABSTOP样式 WS_TABSTOP样式通过按TAB键或SHIFT + TAB键指定用户可以移动的控件。
当用户按下TAB或SHIFT + TAB时,系统首先确定这些键是否由当前具有输入焦点的控件处理。它向控件发送WM_GETDLGCODE消息,如果控件返回DLGC_WANTTAB,则系统将密钥传递给控件。否则,系统使用GetNextDlgTabItem函数来定位下一个可见但未禁用且具有WS_TABSTOP样式的控件。搜索从当前具有输入焦点的控件开始,并按照创建控件的顺序继续进行,即在对话框模板中定义它们的顺序。当系统找到具有所需特征的控件时,系统会将输入焦点移动到该控件。
如果搜索具有WS_TABSTOP样式的下一个控件遇到具有WS_EX_CONTROLPARENT样式的窗口,则系统会递归搜索窗口的子项。
应用程序还可以使用GetNextDlgTabItem来查找具有WS_TABSTOP样式的控件。该函数检索具有WS_TABSTOP样式的下一个或上一个控件的窗口句柄,而不移动输入焦点。
来源:MSDN。
答案 2 :(得分:1)
if( !IsDialogMessage(0, &msg) )
第一个参数不应该是NULL,它必须是对话框的句柄。当然痛苦不堪。