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

标签 c++ windows keyboard

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

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

最佳答案

我怀疑 kbhit 只在控制台(标准输入)上监听。

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

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

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

关于C++ getkey() 和 kbhit() 作用于错误的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14208615/

相关文章:

c++ - 发生错误后执行的代码

c++ - 为什么我用 WriteFile 写入文件的每个字符之间都有一个空白?

c# - 如何判断列表框中的内容在哪一行

IOS 搜索键盘慢

C++解析比特流

c++ - 使用 C++ AMP 库

c++ - 使用冲浪检测器进行对象匹配

windows - Tomcat/Windows下Jenkins中无法删除pom.xml

c# - 如何将键盘输入命令绑定(bind)到主窗口?

javascript - 如何禁用默认键盘?我只想在我的网页中显示自定义键盘