c++ - 获取窗口图标 : GetClassLong VS SendMessage

标签 c++ winapi

如果我知道他的句柄,有两种获取窗口图标的方法:

SendMessage(HWND,0x7F lParam, wParam)

GetClassLong(HWND, -14|-34)

但即使我使用 GetClassLong 从窗口获取图标,我也无法使用 SetClassLong 设置新图标,但可以使用 SendMessage 成功设置新图标。 我需要知道:为什么有时使用第二种 get 方法,但不使用第一种方法。为什么总是来自 SendMessage(WN_SETICON) 而 SetClassLong(HWND, -14|-34, HICON) 不起作用?

最佳答案

GetClassLong从窗口类中检索 long

窗口类是创建指定类型窗口的蓝图,不是窗口本身。
它可以包含很多默认值,例如默认图标和默认小图标。

但是一个窗口只是基于它,它可以覆盖一切。
因此,设置窗口类的图标不会修改任何已经创建的类,您必须向窗口发送消息。
读取 windowclass-data 会得到陈旧的数据,这些数据可能与窗口相关,也可能不相关。

顺便说一句,-14|-34 将是 GCL_HICON|GCL_HICONSM-2,这实际上没有意义。
明确地说你用两个索引一个接一个地阅读。

关于c++ - 获取窗口图标 : GetClassLong VS SendMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27861465/

相关文章:

windows - Delphi 从线程调用 shgetfileinfo 失败

c++ - 连接到 64 位机器的 RegConnectRegistry 问题

c++ - NetUIHWND 和 DirectUIHWND

c++ - 与安全 bool 习语相关的运算符重载和隐式转换为 bool

c++ - 如何在Netbeans中启用C++ 17?

c++ - 赋值运算符重载和自赋值

c++ - IsWindows10OrGreater() 在 Windows 10 上失败

c++ - 如何为使用 createwindow 创建的窗口创建自定义背景颜色

c++ - 我想创建一个 DeskBand。我必须使用 C++ 吗?

c++ - C/C++ 宏扩展 : from two to four parameters