gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 14:15:08 29 4
gpt4 key购买 nike

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com