C ++中的对话框没有接收到某些键击

时间:2011-12-27 12:18:42

标签: c++ windows dialog

当我(最终)学习用C ++编写Windows应用程序时,我偶然发现:我有一个用CreateDialog()创建的对话框,我也有一个默认按钮。但是,每次按TABENTER时,都不会发生任何操作,控件焦点也不会更改,默认按钮也不会激活。这是我对话框的资源。

IDD_MAINWIND DIALOG 0, 0, 312, 205
STYLE DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_CAPTION | WS_VISIBLE | WS_GROUP | WS_POPUP | WS_SYSMENU
EXSTYLE WS_EX_WINDOWEDGE
CAPTION "Dialog"
FONT 8, "Tahoma"
{
    PUSHBUTTON      "&Send", IDC_BUTTON_SEND , 280, 168, 22, 14, BS_DEFPUSHBUTTON
    LTEXT           "Hello", IDC_STATIC1, 9, 9, 296, 149, SS_LEFT | SS_NOPREFIX | SS_SUNKEN, WS_EX_TRANSPARENT
    EDITTEXT        IDC_MESSAGE, 9, 168, 265, 13, ES_AUTOHSCROLL
    PUSHBUTTON      "Tools", IDC_BUTTON_TOOLS, 8, 185, 146, 14
    PUSHBUTTON      "Exit", IDC_BUTTON_EXIT, 163, 185, 136, 14
}

非常感谢任何帮助。特别是现在圣诞节的第3天。

1 个答案:

答案 0 :(得分:3)

解决方案是将WS_TABSTOP样式添加到对话框的每个子元素中。

例如:

PUSHBUTTON      "&Send", IDC_BUTTON_SEND , 280, 168, 22, 14, BS_DEFPUSHBUTTON | WS_TABSTOP

确保每个控件都有WS_VISIBLE | WS_CHILD个样式。 另外,不要忘记在窗口中添加WS_EX_CONTROLPARENT样式,并从对话框窗口中删除WS_GROUP样式。

<强>此外

检查对话框proc

或者,如果您使用窗口过程,请使用以下代码段

Tabbing由对话管理器提供,而不是Window管理器。因此,要获取标签处理,您需要使用窗口的hwnd在消息循环中调用IsDialogMessage

/* Run the message loop. It will run until GetMessage() returns 0 */
while (GetMessage (&messages, NULL, 0, 0))
{
    if (!IsDialogMessage(hwnd, &messages))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }
}

请了解WS_TABSTOP和WS_GROUP对话框项属性。

此链接应对您有所帮助:http://msdn.microsoft.com/en-us/library/windows/desktop/ms644994.aspx#controls