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

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

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

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

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

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

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

修改窗口类的属性将影响所有该类的窗口_第1张图片

>> 请移步至 topomel.com 以查看图片 <<

总结

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

最后

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

修改窗口类的属性将影响所有该类的窗口_第2张图片修改窗口类的属性将影响所有该类的窗口_第3张图片

 

你可能感兴趣的:(OldNewThing,软件开发,系统设计,windows)