【问题标题】:Dialog box in C++ not receiving certain keystrokesC++ 中的对话框不接收某些击键
【发布时间】:2012-01-28 11:52:57
【问题描述】:

当我(最终)学习用 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
}

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

【问题讨论】:

  • 任何资源编辑器都会为您解决这个问题。你用的是哪一个?
  • 真可惜。我自己写的,希望我能学到这个。我正在使用 Code::Blocks,而且我工作得很辛苦……但至少它可以工作。
  • 很公平。手动操作并不困难,只是很乏味。样式标志(如您需要的,WS_TABSTOP)与资源脚本没有任何直接关系。它们是您为所有窗口/控件设置的标准窗口样式,记录在 here。当您对自己的技能足够熟悉时(或厌倦了练习),请下载ResEdit
  • 我已经在所有地方添加了WS_TABSTOP,但它仍然无法正常工作... :|每次按 Enter 时,我都会听到一声哔声。

标签: c++ windows dialog


【解决方案1】:

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

例如:

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

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

此外

检查您的对话过程

或者如果你使用 window proc 来代替使用下面的 sn-p

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

【讨论】:

  • 这并没有真正帮助我,同样的事情发生了。我应该说每次按 Enter 时都会听到一声哔哔声。
  • 然后尝试在控件中添加WS_CHILD | WS_VISIBLE样式。
  • 好的。也许你忘了设置初始焦点? SetFocus(GetDlgItem(hwndDlg, ID_BUTTON_SEND);
  • 也这样做了。现在按钮已被选中,但我只能使用空格键按下它,而不是输入。选项卡仍然被忽略,我无法使用它浏览控件。 (顺便说一句,感谢您到目前为止的帮助)
  • 在对话框样式中添加WS_EX_CONTROLPARENT
猜你喜欢
  • 2021-02-08
  • 2010-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多