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

2024-01-10

当我(最终)学习用 C++ 编写 Windows 应用程序时,我偶然发现了这一点:我有一个用它创建的对话框CreateDialog()我还有一个默认按钮。然而,每次我按下TAB or ENTER,什么也没有发生,控制焦点也没有改变,默认按钮也没有激活。这是我的对话框的资源。

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
}

任何帮助是极大的赞赏。尤其是现在圣诞节的第三天。


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

例如:

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

确保每个控件都有WS_VISIBLE | WS_CHILD风格。 另外不要忘记添加WS_EX_CONTROLPARENT为窗口设置样式并删除WS_GROUP对话框窗口中的样式。

Moreover

检查你的对话过程

或者如果你使用 window proc 代替使用以下代码片段

选项卡由对话框管理器提供,而不是窗口管理器。因此,要获得选项卡处理,您需要调用IsDialogMessage在消息循环中使用窗口的 hwnd:

/* 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 http://msdn.microsoft.com/en-us/library/windows/desktop/ms644994.aspx#controls

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 中的对话框未接收到某些击键 的相关文章

随机推荐