我现在正在使用游乐场SDK,需要获得我游戏窗口的WNDCLASS。我还没有在SDK中找到任何东西,这就是为什么我试图用hWnd的游戏窗口来做这件事。那么有没有办法从HWND获得WNDCLASS? 我需要这个来改变游戏窗口中的系统光标
答案 0 :(得分: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::array
替换为std::vector
,将.data()
替换为&className[0]
,将nullptr
替换为NULL
。 GetClassInfo
如果您需要WNDCLASS
而不是WNDCLASSEX
,则会返回{{1}}。