在我的界面中,我有幾個按鈕,一個組合框和一個顯示圖像序列的窗口。這些按鈕在序列中導航,但我也想通過鍵盤上的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