修改窗口类的属性将影响所有该类的窗口
正如标题所指出的:窗口类的属性将影响所有由该窗口类创建的窗口。这就是它为什么称之为窗口类的原因。
我用这么多话来强调这一点,似乎是一件显而易见的事情,但我看到许多”解决方案”忽视了这个简单的事实。
在 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)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。
- 下一篇: 思维调试:理解 DDE 的初始化过程
- 上一篇: 浅谈更糟糕的 CS_CLASSDC 标志位的作用
相关推荐
- 实现多次鼠标点击
- Posted on 12月01日
- ATL中__if_exists的替代方案
- Posted on 03月06日
- 代码片段:清除资源管理器图标缓存
- Posted on 05月06日
- 小技巧:加快VS2010编译速度
- Posted on 07月07日
评论已关闭。