- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我现在正在使用 playground SDK,需要获取游戏窗口的 WNDCLASS。我在 SDK 中没有找到任何东西,这就是为什么我试图用游戏窗口的 hWnd 来做到这一点。那么有没有办法从HWND获取WNDCLASS呢?我需要这个来改变游戏窗口中的系统光标
最佳答案
我不知道有问题的 SDK,但只要它提供对 native HWND
类型的访问,就可以使用 native 调用。
更改该类所有窗口的光标:
使用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 ]
,以及带有 NULL
的 nullptr
。 GetClassInfo
将返回一个 WNDCLASS
如果你需要它而不是 WNDCLASSEX
。
关于c++ - 如何从 HWND 获取 WNDCLASS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13369334/
我是一名优秀的程序员,十分优秀!