gpt4 book ai didi

c++ - BUTTONS、COMBO BOX 和 KEYBOARD KEYS 相互阻塞 (winapi)

转载 作者:行者123 更新时间:2023-11-28 03:54:42 25 4
gpt4 key购买 nike

在我的界面中,我有几个按钮、一个组合框和一个显示图像序列的窗口。这些按钮在序列中导航,但我还想通过键盘上的左箭头和右箭头导航。编译后键盘键工作正常,因为焦点设置在主窗口,但单击按钮或组合键后键盘键不起作用。我在主循环中使用 SetFocus(main_hwnd) 对其进行管理,但是组合框在单击时没有反应。

示例如下:

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{

case WM_CREATE:
CreateWindowEx(0, "COMBOBOX", "", WS_CHILD | WS_VISIBLE | CBS_SORT | CBS_DROPDOWNLIST, 478, 5, 50, 200, hwnd, (HMENU)ID_COMBO1, GetModuleHandle(NULL), NULL);
break;

case WM_COMMAND:
break;

case WM_KEYDOWN:
switch(wParam)
{
case VK_SPACE:
PostQuitMessage(0);
break;
}
break;

case WM_DESTROY:
PostQuitMessage (0);
break;

default:
return DefWindowProc (hwnd, message, wParam, lParam);
}
// SetFocus(hwnd);
return 0;
}

假设这个例子:编译后 SPACE KEY 将起作用,但单击组合框后,它将不起作用。如果我使用 SetFocus(hwnd),SPACE KEY 将始终有效,但组合框将被禁用。

感谢您的帮助。

最佳答案

是的,您的窗口过程仅适用于该窗口,组合框是一个单独的窗口。我喜欢像这样在消息循环中处理我的热键:

MSG msg;

while (GetMessage(&msg, NULL, 0, 0) > 0)
{
if (msg.message == WM_KEYDOWN)
{
if ((UINT)msg.wParam == VK_SPACE)
{
return 0; // or use postquitmessage
}
}

TranslateMessage(&msg);
DispatchMessage(&msg);
}

关于c++ - BUTTONS、COMBO BOX 和 KEYBOARD KEYS 相互阻塞 (winapi),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4114823/

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