3

简洁版本:

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

背景资料:

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

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

谢谢,

旺科先生

4

2 回答 2

3

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

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

于 2010-12-28T15:57:36.157 回答
1

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

于 2010-12-28T17:38:56.450 回答