如果我知道他的句柄,有两种获取窗口图标的方法:
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/