你目前正处于脱机状态,正在等待 Internet 重新连接

信息: 计算的逻辑的高度和字体点大小

注意:这篇文章是由无人工介入的微软自动的机器翻译软件翻译完成。微软很高兴能同时提供给您由人工翻译的和由机器翻译的文章, 以使您能使用您的语言访问所有的知识库文章。然而由机器翻译的文章并不总是完美的。它可能存在词汇,语法或文法的问题,就像是一个外国人在说中文时总是可能犯这样的错误。虽然我们经常升级机器翻译软件以提高翻译质量,但是我们不保证机器翻译的正确度,也不对由于内容的误译或者客户对它的错误使用所引起的任何直接的, 或间接的可能的问题负责。

点击这里察看该文章的英文版: 74299
概要
若要指定只需的点大小在 Microsoft Windows 图形环境中创建一种字体,应用程序必须计算逻辑字体的高度,因为 CreateFont()CreateFontIndirect() 函数使用逻辑单位来指定高度。

若要描述一种字体以用户,应用程序可以计算给定其高度的字体的磅值。本文提供了执行这些计算 MM_TEXT 映射模式所需公式。您必须将派生一个新的公式来计算另一种映射模式中的字号。
更多信息
如果要计算逻辑高度,请使用以下公式:
                                Point Size * LOGPIXELSY   height = Internal Leading + -------------------------                                          72				
LOGPIXELSY 是包含在设备上的逻辑英寸的像素数。通过调用带有 LOGPIXELSY 索引 GetDeviceCaps() 函数获取此值。因为一英寸包含 72 磅,72 值非常重要。

使用此计算问题是没有以确定该内部前导字体因为它尚未尚未创建方法。若要变通解决此问题,使用以下公式的变体:
            -(Point Size * LOGPIXELSY)   height = --------------------------                         72				
可能还,如下所示编写此公式:
   plf->lfHeight = -MulDiv (nPtSize, GetDeviceCaps (hdc, LOGPIXELSY), 72);				
字体映射器应用程序调用 CreateFont()CreateFontIndirect() 工作,并指定一个负值高度参数时, 提供最接近的匹配项的字符高度,而不是单元格的高度。单元格的高度与字符高度之间的时差是了内部前导,如下列关系图所示:
   ----------  <------------------------------   |        |           |- Internal Leading  |   | |   |  |  <---------                    |   | |   |  |        |                       |- Cell Height   | |---|  |        |- Character Height     |   | |   |  |        |                       |   | |   |  |        |                       |   ----------  <------------------------------				
以下公式计算的一种字体点大小:
                (Height - Internal Leading) * 72   Point Size = --------------------------------                           LOGPIXELSY				
TEXTMETRIC 数据结构可获得的高度和内部行距值。如上所述,从 GetDeviceCaps 函数获取 LOGPIXELSY 值。

计算出舍入到最接近的整数中磅值。Windows MulDiv() 函数将其结果舍入,以执行上一计算一个极好的选择。
3.00 3.10 3.50 4.00 win16sdk TrueType

警告:本文已自动翻译

属性

文章 ID:74299 - 上次审阅时间:11/21/2006 15:47:12 - 修订版本: 3.2

Microsoft Windows 软件开发工具包 3.1, Microsoft Win32 Application Programming Interface

  • kbmt kbinfo KB74299 KbMtzh
反馈