我现在正在使用 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 回答