针对同一声明的LOGFONT的TEXTMETRIC.tmMaxCharWidth属性在Win2000和Vista下居然不一样

在把一些早期开发的针对Windows 2000的Win32 SDK/MFC和WinForm应用移植到Vista的过程中,我们发现一些很有趣或很恶心的问题,TEXTMETRIC.tmMaxCharWidth是其中比较恶心的一例。

如同标题所述,“针对同一声明的LOGFONT的TEXTMETRIC.tmMaxCharWidth属性在Win2000和Vista下居然不一样”,是的,实践表明它们缺省不一样,声明了同样的LOGFONT的同一段代码,分别在Win2000下和Vista下获取TEXTMETRIC.tmMaxCharWidth属性,得到的结果是不一样的,一般规律是Vista得到的数值比2000下要大,而且随着字号的增大,Vista跟2000之间的差值也随着增大。

因为我们有一些程序是根据TEXTMETRIC.tmMaxCharWidth来计算字符的坐标并逐个逐个描画字符的,从现象看起来,就好像是当同一个字符串表示在画面上的时候,Vista下的字符间隙比Win2000下要大。而实际上只是字符坐标上的变化,并非真的是字符间隙发生了变化,如果把整个字符串传递给GDI的函数去描画的话(例如DrawTextEX),是没有这样的问题的。

我们很遗憾地发现,通过搜索引擎并不能找到问题的答案,而且发现甚至连讨论这个问题的文章都没有,难道是已经没有人使用这样的方案去描画字符串(特殊场合)?或者说遇到这样的问题的人根本就不在意这个问题?

不得已我们使用了一个比较笨的办法去解决问题,我们把系统中要用到的各种字体字号的组合列举出来,在Windows 2000中预先算出各个对应的TEXTMETRIC.tmMaxCharWidth值,然后在Vista中直接套用2000下算出来的值(常量的形式),而不是在程序中计算TEXTMETRIC.tmMaxCharWidth。

Well,我希望有大牛前来传道授业解惑~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值