我正在与操场SDK一起工作,需要获取我的游戏窗口的WNDCLASS。我没有在SDK中找到任何东西,这就是为什么我试图用游戏窗口的hWnd来做到这一点。那么有没有办法从HWND获取WNDCLASS? 我需要这个来更改游戏窗口中的系统光标如何从HWND获取WNDCLASS?
3
A
回答
5
我不知道有关SDK的问题,但只要它提供对本机HWND
类型的访问权限,就可以使用本机调用。
改变光标该类的所有窗口:
使用SetClassLongPtr
功能:
SetClassLongPtr(hwnd, GCLP_HCURSOR, reinterpret_cast<LONG_PTR>(newCursorHandle));
改变光标只是在游戏窗口:
首先,您可以处理一个WM_SETCURSOR
消息,以控制窗口中显示的光标。您可以在下面的Adam Rosenfield的评论中阅读更多内容。
除此之外,还有一个选择:根据SetCursor
文档,首先确保类的光标设置为空(NULL
)。然后,当鼠标进入和离开客户区域时,您可以使用SetCursor
函数。为了不干扰类中的其他窗口,确保在鼠标输入时将类游标设置为NULL,并将其设置回鼠标退出时的状态。
otherCursor = SetCursor(otherCursor);
要获得与窗口相关的只读WNDCLASSEX:
首先,使用GetClassName
获得与窗口相关联的类的名称:
std::array<TCHAR, 256> className; //256 is max classname length
GetClassName(hwnd, className.data(), className.size());
然后,使用在调用GetClassInfoEx
:
WNDCLASSEX wce;
GetClassInfoEx(GetModuleHandle(nullptr), className.data(), &wce);
你可以访问wce
阅读类结构的内容。如果需要,你可以用std::vector
和.data()
与&className[0]
取代std::array
,以及nullptr
与NULL
。 GetClassInfo
会返回一个WNDCLASS
,如果你需要的,与其WNDCLASSEX
。
相关问题
- 1. 从Firefox获取HWND
- 2. 如何从字符串中获取HWND?
- 3. 从HWnd获取永久CWnd
- 4. 从HWND中获取HMENU Hook
- 5. 从hWnd获取(资源)ID
- 6. 如何获取Window实例的hWnd?
- 7. 如何通过HWND获取窗口类?
- 8. 获取的hWnd从当前进程
- 9. 如何从具有特定HWND的窗口中获取文本?
- 10. 如何使用托管VB.net代码从HWND获取进程ID?
- 11. JACOB获取窗口的HWND
- 12. 通过进程ID获取hwnd C++
- 13. PAMIE:获取IE窗口的hwnd
- 14. 在Qt中获取Widget的HWND
- 15. 获取每个窗口的HWND?
- 16. 获取HWND支持Direct3D初始化
- 17. 如何在另一窗口中获取Combobox的HWND?
- 18. 如何获取ATL DLL中的HWND(用于SendMessage或PostMessage)
- 19. 如何获取给定HWND的工具提示文本?
- 20. 如何通过编程方式从进程HWND获取句柄ID?
- 21. 如何从hWnd获得显示器屏幕分辨率?
- 22. Win32获取从窗口发送事件的对象的HWND WndProc
- 23. 从UWP中的CoreWindow对象中获取HWND
- 24. 从工具栏获取包含IE窗口的HWND
- 25. NSIS插件:不能从参数函数获取HWND
- 26. 从HWND到控制
- 27. 如何截断HWND标题
- 28. 获取窗口hwnd如果所有者hwnd,窗口的名称和大小已知
- 29. 如何获取当前活动的Windows资源管理器窗口的HWND?
- 30. 如何从提供HWND的自绘窗口提取文本信息?
只是好奇,但你为什么不能跟踪你传入'RegisterClass'数据? –
@AdamRosenfield操场是一款适用于休闲游戏的跨平台SDK,它创建了一个窗口。 – IronMensan
@ElDorado,想知道,因为通常不需要访问课程,你在做什么? – chris