说说DS_SHELLFONT这个对话框风格

说说DS_SHELLFONT这个对话框风格

作者:BlogUpdater |  时间:2022-04-29 |  浏览:101 |  评论已关闭 条评论

如果在对话框模板中用到了DS_SHELLFONT,则表明你希望使用Windows 2000 默认的外壳字体(Default Shell Font)。但是这并不意味着这一定可以实现。如果你希望你的对话框具备Windows 2000的风格样式,则你需要做好下面的3件事情,如果第4件事情也能实现,则更好:
1. 使用DIALOGEX对话框模板,而不是DIALOG。
2. 在对话框风格中设置DS_SHELLFONT标志。
3. 将对话框的字体设置为:“MS Shell Dlg”
4. 在启用了新的 Windows 2000 对话框字体的系统上运行 Windows 2000 或更高版本。

如果上述4个条件都得到了满足,则你的对话框将呈现出Windows 2000的样式风格。如果其中任何一个条件未能满足,则你只会得到一个”经典”的对话框字体显示。请注意,上面说的第4个条件并不是你的程序所能控制的。这就意味着,你必须确保你的对话框在”经典”对话框字体和新的字体中看起来都能显示正常。

对于属性表来说,事情会变得更加复杂。在属性表上混合使用不同的字体会让人看起来很奇怪。你肯定不会希望属性表中的”高级”按钮是MS Sans Serif字体,而应用按钮则使用的是Tahoma字体。

为了解决这个问题,属性表管理器查看属性表中的所有页面。 如果它们都使用“Windows 2000”外观,那么属性表也使用“Windows 2000”外观。 但是,如果有一个页面没有使用“Windows 2000”外观,那么属性表将恢复为“经典”外观,并且还将所有“Windows 2000”外观页面转换为“经典”外观。

这样,属性表中的所有页面都具有“经典”外观,而不是一些具有经典外观的页面和一些具有 Windows 2000 外观的页面混杂在一起。

这就是为什么你偶尔会发现属性表已恢复为“经典”外观的原因。 某些 shell 扩展用一个没有“Windows 2000”外观的页面”感染”了属性表,并且为了视觉一致性,属性表管理器将属性表上的所有页面设置为“经典”外观。

这也是使用“Windows 2000”外观和“经典”外观测试属性表页面很重要的另一个原因。 如果你的属性表页面最终与非“Windows 2000”外观的页面共享一个属性表,您的页面将恢复为“经典”外观。

总结
为了广大用户能心情舒畅地使用我们编写出来的程序,我们不得不对它们进行美化,贴图,重绘等。
但无论如何,底层的运行原理,我们还是需要明白的。

最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《What’s the deal with the DS_SHELLFONT flag?》

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

评论已关闭。