在我的界面中,我有几个按钮,一个组合框和一个显示图像序列的窗口。这些按钮在序列中导航,但我也想通过键盘上的LEFT和RIGHT箭头导航。编译后键盘按键工作正常,因为焦点设置在主窗口,但点击按钮或组合后,键盘按键不起作用。我在我的主循环中用SetFocus(main_hwnd)来管理它,但是当点击组合框时不会发生反应。下面BUTTONS,COMBO BOX和KEYBOARD KEYS封锁海誓山盟(winapi)
例子:
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;
}
assumig这个例子: 编译后的空格键将工作,但点击后组合框,它不会工作。如果我使用SetFocus(hwnd)SPACE KEY将始终工作,但组合框将被禁用。
感谢您的帮助。
有许多与此代码的问题:一个微妙的是,你吞下'WM_KEYDOWN'消息,同时控制仍然会收到相应的'WM_KEYUP'信息。但更重要的是,你重新发明了对话管理器,效果不佳:键盘导航应该使用[IsDialogMessage](http://msdn.microsoft.com/en-us/library/ms645498.aspx)和适当的处理'WM_GETDLGCODE'消息。 – IInspectable 2013-01-08 11:08:26