我寫開始在控制檯窗口中,然後在Microsoft Windows程序產生一個獨立的GUI窗口做一些DirectX的渲染英寸C++信息getKey()和的kbhit()作用於錯誤的窗口
我想在焦點位於directx窗口時獲取鍵盤字符,但是當我鍵入字符時,getkey不會註冊我打任何東西。經過一番混亂之後,我發現如果在按下directx窗口中的某個按鍵之後將焦點更改爲控制檯窗口,我的程序將註冊鍵盤命中。我是否需要對directx窗口進行一些特殊的初始化才能捕獲鍵盤命中?
我寫開始在控制檯窗口中,然後在Microsoft Windows程序產生一個獨立的GUI窗口做一些DirectX的渲染英寸C++信息getKey()和的kbhit()作用於錯誤的窗口
我想在焦點位於directx窗口時獲取鍵盤字符,但是當我鍵入字符時,getkey不會註冊我打任何東西。經過一番混亂之後,我發現如果在按下directx窗口中的某個按鍵之後將焦點更改爲控制檯窗口,我的程序將註冊鍵盤命中。我是否需要對directx窗口進行一些特殊的初始化才能捕獲鍵盤命中?
我懷疑kbhit只在控制檯(stdin)上偵聽。
調用GetKeyboardState API來輪詢鍵盤狀態(在每個幀上)而不是使用您引用的那些其他函數。這可能會是你想要的,並會正常工作。這是我在遊戲工作室工作時使用的。
上的窗口句柄(HWND)如果你想成爲多個事件比輪詢驅動的,和你有一個消息泵(的GetMessage/DispatchMessage函數循環),只可以監聽的WM_CHAR,WM_KEYDOWN某種組合WM_KEYUP你DirectX窗口。
如果您需要焦點增益/損失檢測,請查找WM_SETFOCUS/WM_KILLFOCUS或僅使用GetFocus()。
使用窗口消息而不是棄用的函數!他們在這裏的目的完全不同。您擁有您的GUI窗口,因此可以處理通過標準窗口消息發送給它的所有輸入。 – chris