C ++ getkey()和kbhit()作用于错误的窗口

时间:2013-01-08 05:17:31

标签: c++ windows keyboard

我正在编写一个在控制台窗口中启动的微软Windows程序,然后生成一个单独的gui窗口来进行直接渲染。

我正在尝试获取键盘字符,而焦点在directx窗口上,但是当我输入字符时,getkey没有注册我点击任何东西。经过一番乱搞,我发现如果在按下directx窗口中的一个键后将焦点更改为控制台窗口,我的程序会记录键盘命中。我是否需要对directx窗口进行一些特殊的初始化才能捕获键盘命中?

1 个答案:

答案 0 :(得分:1)

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

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

如果你想要比轮询更多的事件驱动,并且你有一个消息泵(GetMessage / DispatchMessage循环),那么就可以听取WM_CHARWM_KEYDOWN和{{3在DirectX窗口的窗口句柄(hwnd)上。

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

相关问题