简短版本:
如果我无法访问HWND / HINSTANCE,如何初始化和使用DirectInput?
背景资料:
我目前正在为程序的大多数部分使用SFML,其中包括用于创建窗口。奇迹般有效。但是我对SFML的输入系统并不完全满意(例如我想要XBox用于XBox 360游戏手柄)并且想要自己编写。
我已经编写了XInput部分,但是对于其他游戏手柄/操纵杆/ ...我还需要DirectInput。由于SFML从用户隐藏了与Windows相关的代码(这是正确的),因此我无法访问hwnd或hinstance。没有它我怎么能使用DirectInput?也许一直在捕捉输入,不仅仅是在窗口处于活动状态时? (然后我可以根据Window的(de)激活事件对其进行过滤。)
谢谢,
先生。 Wonko
答案 0 :(得分:3)
找回窗口并不太难,请使用EnumThreadWindows()和GetCurrentThreadId()。
请注意,DirectInput不需要任何窗口句柄。它只需要DirectInput8Create()中的实例句柄。 GetModuleHandle(NULL)适用于SFML应用程序。
答案 1 :(得分:1)
要获得HINSTANCE,您可以调用:GetModuleHandle(NULL)