如何从HWND获得WNDCLASS

How to get WNDCLASS from HWND?

本文关键字:获得 WNDCLASS HWND      更新时间:2023-10-16

我现在正在使用游乐场SDK,需要获得我的游戏窗口的WNDCLASS。我在SDK中没有找到任何东西,这就是为什么我试图用游戏窗口的hWnd来做这件事。那么有没有办法从HWND获得WNDCLASS?我需要这个来更改游戏窗口中的系统光标

我不知道有问题的SDK,但只要它提供对本机HWND类型的访问,就可以使用本机调用。


要更改该类所有窗口的光标:

使用SetClassLongPtr功能:

SetClassLongPtr(hwnd, GCLP_HCURSOR, reinterpret_cast<LONG_PTR>(newCursorHandle));

只为游戏窗口更改光标:

首先,有一个WM_SETCURSOR消息,您可以处理它来控制窗口中显示的光标。你可以在下面亚当·罗森菲尔德的评论中阅读更多关于这方面的内容。

除此之外,还有一种选择:根据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替换std::array,用&className[0]替换.data(),用CCD15替换nullptr。如果您需要GetClassInfo而不是WNDCLASSEX,则CCD_16将返回WNDCLASS