0

我正在编写一个 microsoft windows 程序,它在控制台窗口中启动,然后生成一个单独的 gui 窗口来进行一些 directx 渲染。

我试图在焦点位于 directx 窗口时获取键盘字符,但是当我键入字符时,getkey 没有注册我击中任何东西。经过一番折腾,我发现如果在 Directx 窗口中按下某个键后将焦点切换到控制台窗口,我的程序会记录键盘击中。我是否需要对directx 窗口进行一些特殊的初始化才能捕获键盘点击?

4

1 回答 1

1

我怀疑 kbhit 只在控制台(stdin)上收听。

调用GetKeyboardState API 来轮询键盘状态(在每一帧上),而不是使用您引用的那些其他函数。这可能是您想要的并且可以正常工作。这是我们在游戏工作室工作时使用的。

如果您想要更多的事件驱动而不是轮询,并且您有一个消息泵(GetMessage/DispatchMessage 循环),则可以在 DirectX 窗口的窗口句柄(hwnd)上侦听WM_CHARWM_KEYDOWNWM_KEYUP的某种组合。

如果您需要焦点增益/丢失检测,请查找WM_SETFOCUS / WM_KILLFOCUS或仅使用GetFocus ()。

于 2013-01-08T05:24:14.810 回答