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

C++ getkey() and kbhit() acting on wrong window

本文关键字:错误 窗口 作用于 getkey c++ kbhit      更新时间:2023-10-16

我正在编写一个microsoft windows程序,它从控制台窗口开始,然后生成一个单独的gui窗口来进行一些直接渲染。

我试图获得键盘字符,而焦点是在directx窗口,但当我键入字符,getkey不注册,我击中任何东西。经过一番折腾之后,我发现如果我在directx窗口中按下一个键后将焦点更改为控制台窗口,我的程序会记录键盘敲击。我是否需要对directx窗口进行一些特殊的初始化,以便能够捕获键盘敲击?

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

调用GetKeyboardState API来轮询键盘状态(每帧),而不是使用你提到的其他函数。这可能是你想要的,并且会很好地工作。这是我在游戏工作室工作时所使用的方法。

如果你想更多的事件驱动比轮询,你有一个消息泵(GetMessage/DispatchMessage循环),只是可以监听WM_CHAR, WM_KEYDOWN和WM_KEYUP的一些组合在你的DirectX窗口的窗口句柄(hwnd)。

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