如何理解《Windows程序设计》第5章中的一段文字 (字体宽度计算)

今天开发一个在线生成合同的程序! 因为生成doc还是pdf都没占内存,于是就想生成图片类型.程序写后最后,就是在排板上怎么计算不好字体的宽度.

  晕!字体宽度不是以像素以单位. 在网上找了半天,找到了这篇文章,记录一下.以备以后用!

如何理解《Windows程序设计》第5章图形设计中“设备的大小”中下面的一段文字:

------------------------------------------------------------------------------------------------
Windows系统字体-不考虑是大字体还是小字体,也不考虑所选择的视频图素大小-固定假设为10点字体和12点行距。这听起来很奇怪,如果字体都是10点,为什么还把它们称为大字体和小字体呢?

解答是:当您在「控制台」的「显示」程序上选择小字体或大字体时,实际上是选择了一个假定的视讯显示分辨率,单位是每英寸的点数 。当选择小字体时,即要Windows假定视讯显示分辨率为每英寸96点。当选择大字体时,即要Windows假定视讯显示分辨率为每英寸120点。

再看看图5-2。那是小字体,它依据的显示分辨率为每英寸96点。我说过它是10点字体。10点即是10/72英寸,如果乘以96点,每英寸大概就为13图素。这即是tmHeight减去tmInternalLeading的值。行距是12点,或12/72英寸,它乘以96点,每英寸 就为16图素。这即是tmHeight的值。

图5-3显示大字体。这是依据每英寸120点的分辨率。同样,它是10点字体,10/72乘以120点,每英寸 等于16图素,即是tmHeight减tmInternalLeading的值。12点行距等于20图素,即是tmHeight的值。(像第四章一样,再次强调所显示的是实际的度量大小,因此您可以理解
它工作的方式。不要在您的程序中对此写作程序。)

在Windows程序中,您可以使用GetDeviceCaps函数取得使用者在「控制台」的「显示器」程序中选择的以每英寸的点数为单位的假定分辨率。

要得到这些值(如果视讯显示器不具有正方形图素,在理论上这些值是不同的),可以使用索引LOGPIXELSX和LOGPIXELSY。LOGPIXELS指逻辑图素,它的基本意思是「以每英寸的图素数为单位的非实际分辨率」。
------------------------------------------------------------------------------------------------

首先我们必须指出,这其中有些错误的地方(不知道是翻译错误还是印刷错误,这就不得而知了),更正后(逗号的位置不一样了) 的文字如下:

------------------------------------------------------------------------------------------------
Windows系统字体-不考虑是大字体还是小字体,也不考虑所选择的视频图素大小-固定假设为10点字体和12点行距。这听起来很奇怪,如果字体都是10点,为什么还把它们称为大字体和小字体呢?

解答是:当您在「控制台」的「显示」程序上选择小字体或大字体时,实际上是选择了一个假定的视讯显示分辨率,单位是每英寸的点数。当选择小字体时,即要Windows假定视讯显示分辨率为每英寸96点。当选择大字体时,即要Windows假定视讯显示分辨率为每英寸120点。

再看看图5-2。那是小字体,它依据的显示分辨率为每英寸96点。我说过它是10点字体。10点即是10/72英寸,如果乘以96点,每英寸大概就为13图素。这即是tmHeight减去tmInternalLeading的值。行距是12点,或12/72英寸,它乘以96点每英寸 就为16图素。这即是tmHeight的值。

图5-3显示大字体。这是依据每英寸120点的分辨率。同样,它是10点字体,10/72乘以120点每英寸 等于16图素,即是tmHeight减tmInternalLeading的值。12点行距等于20图素,即是tmHeight的值。(像第四章一样,再次强调所显示的是实际的度量大小,因此您可以理解
它工作的方式。不要在您的程序中对此写作程序。)

 

阅读全文>>

你可能感兴趣的:(如何理解《Windows程序设计》第5章中的一段文字 (字体宽度计算))