WinForm缺省字体之迷

WinForm缺省字体之迷

上一篇说了Form自动放缩的问题,而缺省的放缩是根据字体的比例的,但奇怪的是,Form的Font属性不是设定好的嘛,为什么会变呢?如果会变的话,它从哪里取得当前系统的字体呢?

注意读SDK文档的话会发现Control.Font是个Ambient属性,也就是说,如果没有被用户修改过的话,它会使用父窗口的值。那么Form的父窗口也就是桌面了,也就是该使用桌面的字体。桌面的字体是什么?你可能会想到显示属性里的“窗口文本”和“桌面图标文本”字体设定。然后比较一下就会发现WinForm里的字体和他们都不一样。当然也有一样的情况。(英文版)XP的系统缺省字体是Tohoma,而WinForm里是"MS Sans Serif"。

WinForm的缺省字体是GDI的DEFAULT_GUI_FONT,这个值从Windows诞生那天起就没变过。这个字体不随桌面主题的配置而变化,但随DPI变化尺寸。为什么?没人知道。估计连微软内部也没有多少人记得了。但可以肯定,这减少了缺省字体变化而导致的显示问题。不过这个缺省字体在今天看来很难看,不过很少有人会去抱怨这个问题。

但是,.NET 2.0里的ToolStrip, MenuStrip and StatusStrip却正确地使用了系统菜单字体。当用户在桌面主题里选择了大字体模式时,这种反差尤其明显。那个该如何做呢?有人指出Visual Studio 2005的界面使用的是桌面图标文本字体。那么对我们来说,最简单的方法就是在Form的构造函数里加上一句this.Font = SystemFonts.IconTitleFont。同时,我们也得到了调试Form的AutoScale而又不需要多个不同的系统测试的方法——只要改Form字体就行了。

另外对中文系统来说,还有个问题需要注意。中文字体大多是点阵字体,放缩效果很差。只有个别尺寸的字体是能看的。而我们的开发系统大多用2000/XP,在这些NT系统上,点阵字体的尺寸会被自动取整到能够清晰显示的尺寸。所以不注意的话,会做出在98/ME上没法看的程序。比较懒的开发人员只要记住98/ME的中文系统字体是11象素高,即GDI的字体高用-11。注意是象素数而不是Point数,Point数是和DPI相关的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值