3

我现在正在使用 Playground SDK,需要获取我的游戏窗口的 WNDCLASS。我在 SDK 中没有找到任何东西,这就是为什么我试图用游戏窗口的 hWnd 来做到这一点。那么有什么方法可以从 HWND 获取 WNDCLASS 吗?我需要这个来改变游戏窗口中的系统光标

4

1 回答 1

6

我不知道有问题的 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::arraystd::vector.data()&className[0]以及nullptr替换为NULLGetClassInfo如果您需要它,将返回 aWNDCLASS而不是WNDCLASSEX.

于 2012-11-13T21:50:19.627 回答