当前位置:C++技术网 > 资讯 > 两种获取字体平均宽度和高度的方法详细分析

两种获取字体平均宽度和高度的方法详细分析

更新时间:2016-02-03 20:44:13浏览次数:1+次

    当我们需要获取文本的信息的时候,多数是要获取字体的宽度和高度。通常我们会想到GetTextMetrics函数来获取文本相关的信息。麻烦的是,我们要提供一个文本信息结构体变量来接收信息,还要搞清楚结构体的各个成员的含义。说实话,要搞清楚所有成员的含义确实挺复杂的。这不是有了GetDialogBaseUnits函数嘛。
    既然我们经常需要字体的宽度和高度信息,那么微软就专门提供了这个函数,方便编程。
    GetDialogBaseUnits函数没有参数,返回LONG类型的值。返回值的低字部分包含了对话框的水平方向的基本单位,单位值与系统字体的平均宽度相同。返回值的高字部分包含了对话框的垂直方向的基本单位,单位值与系统字体的高度。基于这个等价关系,我们就可以用GetDialogBaseUnits来替换GetTextMetrics获取系统字体的宽度和高度。
    此函数通常获取对话框基本单位值,然后与屏幕像素进行转换,而转换的基础就是上面所述的等价关系。如果对话框使用的字体不是系统字体,那么获得的值就不能与系统字体等价了。此函数更多的是对话框模板相关的内容,我们只是借助这个特点来快速得到系统字体。
    所以说,用此函数来获取系统字体的宽和高并不是通用的,需要注意。此函数就是获取系统字体的平均宽度和高度而已。
    下面是GetDialogBaseUnits使用的代码示例:

LONG fontInfo = GetDialogBaseUnits();
int fontAvgWidth = LOWORD(fontInfo);
int fontHeight = HIWORD(fontInfo);
     如果使用GetTextMetrics函数,一样是可以获取字体的信息,而且是最全面的字体信息。GetTextMetrics函数获取的是DC中当前使用的字体的所有信息,不会局限于系统字体。所以,功能比较强大。
    下面是GetTextMetrics函数获取当前使用字体的平均宽度和高度的代码:
TEXTMETRIC tm;
GetTextMetrics(hdc, &tm);
int fontAvgWidth = tm.tmAveCharWidth;
int fontHeight = tm.tmHeight;
     两种获取字体的宽度和高度的方法都是可取的,而且各有特点。通常你对于字体没有任何修改设置的话,就是默认的系统字体。此时如果要得到字体的平均宽度和高度,就可以用GetDialogBaseUnits。而使用默认系统字体非常普遍,所以应用的地方也是很多的。而如果在程序中修改了字体,那么要获取当前用到的字体的平均宽度和高度,GetDialogBaseUnits函数将不起作用。此时还是用GetTextMetrics函数,虽然在全面理解上颇费工夫,然而在使用时,代码量也是不多的。