格式化输出 如果要使用TextOut函数在Windows应用程序中输出多行文字,我们就必须先取得字符的宽度和高度,通常我们在窗口消息处理函数中处理WM_CREATE消息的时候调用GetTextMetrics函数来获取他们,之所以放到WM_CREATE的部分调用,是因为当系统启动后,系统字体的大小就不会发生改变,我们只需要调用一次GetTextMetrics就可以了。 具体方法如下: case WM_CREATE: hdc = GetDC (hwnd); // 取得设备描述表句柄。 GetTextMetrics (hdc, &tm); // 调用GetTextMetrics函数将获得的信息保存在缓冲区中。 iLFx = tm.tmAveCharWidth; // 获得小写字符的平均宽度,小写字母的加权平均值就是字符的平均宽度。 iCFx = (tm.tmPitchAndFamily & 1 ? 3 : 2) * cxChar / 2; // 获得大写字符的平均宽度,对于变宽字体而言,大写字符的平均宽度是iLFx乘以150%,而如果是等宽字体,那么iCFx就等于iLFx。 iFy = tm.tmHeight + tm.tmExternalLeading; // 字符高度等于字符准线上下最大纵向高度加行距。 ReleaseDC (hwnd, hdc) ; // 释放设备描述表句柄。 return 0; 大家可能对上面代码中的,tm.tmPitchAndFamily & 1 ? 3 : 2,这样的写法感到疑惑,TEXTMETRICS结构的tmPitchAndFamily属性是用来判断字体是否为变宽字体的,如果是等宽字体那么它的低位就为0,如果为变宽字体那么它的低位就为1,所以通过位运算我们可以判断是否为变宽字体,如果是就进行乘以150%的操作。 看到这里,我们已经了解了TextOut函数输出所需要的所有知识,下面我们将以一个完整的例子对它进一步的学习。 实例练习 例子目的是要将GetSystemMetrics函数所需要的参数以及这些参数的含义和返回值,以字符串的方式并格式化后循环输出在屏幕上。 该例程我们分为两个文件,一个是用来保存GetSystemMetrics函数所需索引的头文件,另一个则是程序的主文件,代码的详细解释见代码的注释部分。
|
正在阅读:Windows API-GDI入门基础知识详解(3)Windows API-GDI入门基础知识详解(3)
2005-07-05 10:03
出处:PConline
责任编辑:xietaoming
键盘也能翻页,试试“← →”键