gpt4 book ai didi

c++ - 如何从 HWND 获取 WNDCLASS?

转载 作者:太空狗 更新时间:2023-10-29 20:44:21 31 4
gpt4 key购买 nike

我现在正在使用 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 ],以及带有 NULLnullptrGetClassInfo 将返回一个 WNDCLASS 如果你需要它而不是 WNDCLASSEX

关于c++ - 如何从 HWND 获取 WNDCLASS?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13369334/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com