我现在正在使用 Playground SDK,需要获取我的游戏窗口的 WNDCLASS。我在 SDK 中没有找到任何东西,这就是为什么我试图用游戏窗口的 hWnd 来做到这一点。那么有什么方法可以从 HWND 获取 WNDCLASS 吗?我需要这个来改变游戏窗口中的系统光标
3730 次
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::array为std::vector和.data(),&className[0]以及nullptr替换为NULL。GetClassInfo如果您需要它,将返回 aWNDCLASS而不是WNDCLASSEX.
于 2012-11-13T21:50:19.627 回答