2010-10-31 52 views
1

我正在開發一個使用C++結合普通的舊WinAPI,GDI和GDI +的俄羅斯方塊遊戲。應用程序窗口包含一些UI控件以及用於繪製遊戲狀態的靜態控件。我正在使用鍵盤掛鉤,以便我可以響應箭頭鍵移動當前塊和空格鍵以放下塊。如何防止箭頭鍵改變UI狀態?

但是,擊鍵也會影響用戶界面。移動箭頭鍵可能會改變收音機或組合框的選擇狀態,按空格鍵可能會觸發一個按鈕或複選框,具體取決於當前哪個控件具有焦點。

有沒有辦法來防止這種情況發生?我的臨時攻擊是強制關注隱藏的文本框。我希望有一個更清潔的解決方案

回答

1

如果您使用WH_KEYBOARD_LL或WH_KEYBOARD鍵盤掛鉤,則可以從hookproc返回1以防止將該鍵傳遞給系統的其餘部分。 在這種情況下,不要調用下一個hookproc。

但是,這可能會對使用鉤子的東西造成破壞,並在鉤子鏈中出現。

如果你正在編寫一個GDI應用程序,你已經有一個消息循環,是否有任何理由你沒有使用消息循環來尋找KEY_UP/KEY_DOWN消息?

您可以設置其他控件,因此他們不會接受焦點...

+0

直接從消息循環中操作事件似乎不是一個壞主意。我會試一試。 – StackedCrooked 2010-10-31 09:45:22

1

這是一個真正的鉤子(與SetWindowsHook設置)?如果是這樣,當處理消息時,您可以從hookproc返回非零值,並且Windows不會將消息傳遞給對話框。

+0

是的,這是一個WH_KEYBOARD。謝謝。 – StackedCrooked 2010-10-31 09:43:43