我现在正在使用游乐场SDK,需要获得我游戏窗口的WNDCLASS.我还没有在SDK中找到任何东西,这就是为什么我试图用hWnd的游戏窗口来做这件事.那么有没有办法从HWND获得WNDCLASS?我需要这个来改变游戏窗口中的系统光标
我不知道有问题的SDK,但只要它提供对本机HWND类型的访问,您就可以使用本机调用.
要更改该类的所有窗口的光标:
使用SetClassLongPtr功能:
SetClassLongPtr(hwnd, GCLP_HCURSOR, reinterpret_cast<LONG_PTR>(newCursorHandle));
Run Code Online (Sandbox Code Playgroud)
要仅改变游戏窗口的光标:
首先,有一条WM_SETCURSOR消息可以处理,以控制窗口中显示的光标.您可以在下面的Adam Rosenfield的评论中阅读更多相关内容.
除此之外,还有另一种选择:根据SetCursor文档,首先确保将类的光标设置为nothing(NULL).然后,SetCursor当鼠标进入和离开客户区时,您可以使用该功能.为了不干扰类中的其他窗口,请确保在鼠标输入时将类光标设置为NULL并将其设置回鼠标退出时的状态.
otherCursor = SetCursor(otherCursor);
Run Code Online (Sandbox Code Playgroud)
要获得与窗口关联的只读WNDCLASSEX:
首先,使用GetClassName获取与窗口关联的类的名称:
std::array<TCHAR, 256> className; //256 is max classname length
GetClassName(hwnd, className.data(), className.size());
Run Code Online (Sandbox Code Playgroud)
然后,在调用中使用它GetClassInfoEx:
WNDCLASSEX wce;
GetClassInfoEx(GetModuleHandle(nullptr), className.data(), &wce);
Run Code Online (Sandbox Code Playgroud)
现在您可以访问wce以读取类结构的内容.如果需要,可以替换std::array使用std::vector,并.data()用&className[0],以及nullptr用NULL.如果您需要,GetClassInfo则返回a WNDCLASS而不是WNDCLASSEX.