修改窗口类的属性将影响所有该类的窗口

修改窗口类的属性将影响所有该类的窗口

作者:BlogUpdater |  时间:2023-08-21 |  浏览:607 |  评论已关闭 条评论

正如标题所指出的:窗口类的属性将影响所有由该窗口类创建的窗口。这就是它为什么称之为窗口类的原因。
我用这么多话来强调这一点,似乎是一件显而易见的事情,但我看到许多”解决方案”忽视了这个简单的事实。

在 WNDCLASS(或 WNDCLASSEX)中设置的所有属性都是窗口类属性,可以通过 Get/SetClassWord/Long/LongPtr 访问的属性也是如此。这意味着当你修改这些属性时,它们会影响整个窗口类。

举个例子,假设你写了下面的代码:
SetClassLongPtr(hwnd, GCLP_HCURSOR, (LONG_PTR)hcurNew);

那么你不只是在修改 HWND 指定的窗口的光标。你正在修改与 hwnd 相同类的所有窗口的光标。例如,如果 hwnd 是编辑控件,则你还会修改所有编辑控件的默认光标。

但是,如果你只想修改一个特定窗口的类属性而不是类的所有窗口,该怎么办?

如果要修改特定窗口的菜单、背景、光标或图标,可以基于每个窗口覆盖类默认值,如下图所示:

总结

我们可以将窗口类看做一个制造窗口的模版,所有自该窗口类产生的窗口都具有相同的属性,修改了模版的属性,则所有窗口的属性都会发生变化。
有时候,这是好事,但我们必须了解其原理。

最后

Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Window class properties apply to all windows that belong to the class》

最近我写了个东西

正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。

评论已关闭。