c++ - C++ 中的对话框不接收某些击键

标签 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
}

非常感谢任何帮助。尤其是现在圣诞节的第三天。

最佳答案

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

例如:

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

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

此外

检查你的对话进程

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

Tab 键是由对话框管理器提供的,而不是由窗口管理器提供的。因此,要获得选项卡处理,您需要使用窗口的 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

关于c++ - C++ 中的对话框不接收某些击键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8644543/

相关文章:

c++ - 为什么 digits10 引用整数类型 0?

windows - 为 Windows 中的目录生成校验和

javascript - 对话框创建后的 jQuery ui 对话框触发事件

java - 如何在单击按钮时导出到 .excel 时添加 openwith 并另存为对话框

c++ - 使用 opencv 的 hog 实现

C++:类之间的 "unresolved overload function type"

c++ - 在 C++ 中定义数组大小

c++ - 如何实现打印功能?

python - 在 Windows 上的任务计划程序中计划并手动运行 .pyw 脚本

javascript - Electron - 打开文件夹对话框