【问题标题】:C++ on Windows: Using DirectInput without a window?Windows 上的 C++:在没有窗口的情况下使用 DirectInput?
【发布时间】:2010-12-28 15:19:57
【问题描述】:

短版:

如果我无法访问 HWND/HINSTANCE,如何初始化和使用 DirectInput?

背景资料:

我目前在我的程序的大部分部分使用 SFML,其中包括创建窗口。奇迹般有效。但我对 SFML 的输入系统并不完全满意(例如,我想要 XBox 360 游戏手柄的 XInput)并想自己编写。

我已经编写了 XInput 部分,但对于其他游戏手柄/操纵杆/...我还需要 DirectInput。由于 SFML 对用户隐藏了与 Windows 相关的代码(这是正确的),我无权访问 hwnd 或 hinstance。没有它我如何使用 DirectInput?也许一直在捕捉输入,而不仅仅是在窗口处于活动状态时? (然后我可以根据 Window 的 (de)activated 事件对其进行过滤。)

谢谢,

先生。旺哥

【问题讨论】:

    标签: c++ windows directinput


    【解决方案1】:

    找回窗口并不难,使用 EnumThreadWindows() 和 GetCurrentThreadId()。

    请注意,DirectInput 在任何地方都不需要窗口句柄。它只需要 DirectInput8Create() 中的实例句柄。 GetModuleHandle(NULL) 适用于 SFML 应用程序。

    【讨论】:

    • 谢谢,这就够了。虽然考虑一下......不,输入系统在创建任何窗口之前被初始化(我宁愿不改变它)。有没有办法在没有窗口的情况下使用 DirectInput?
    • 你在哪里需要窗口把手? DirectInput8Create() 不需要,CreateDevice() 也不需要。
    • 哦,对了!这个例子似乎已经足够了。经过调查,它似乎就像调用 GetModuleHandle(NULL) 一样简单。感谢您的帮助,我现在应该可以做到了。
    • 窗口句柄是设置合作级别所必需的。
    【解决方案2】:

    要获取 HINSTANCE,您可以调用:GetModuleHandle(NULL)

    【讨论】:

      猜你喜欢
      • 2012-09-11
      • 1970-01-01
      • 1970-01-01
      • 2012-10-05
      • 2016-03-24
      • 2012-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多