【问题标题】:C++ getkey() and kbhit() acting on wrong windowC++ getkey() 和 kbhit() 作用于错误的窗口
【发布时间】:2013-01-08 05:17:30
【问题描述】:

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

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

【问题讨论】:

  • 使用窗口消息而不是弃用的函数!他们在这里的目的是完全不同的。您拥有自己的 GUI 窗口,因此可以通过标准窗口消息处理所有输入。

标签: c++ windows keyboard


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2019-12-13
    • 1970-01-01
    • 2016-05-11
    • 2014-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-29
    • 1970-01-01
    相关资源
    最近更新 更多