3(CEN)第三章 文本与字体

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

char lpsz_4[]="这是大号、斜体并带有下划线的文字"; char lpsz_5[]="您掌握了字体的操作了吗?"; char lpsz_6[]="祝您成功!";
int X=0,Y=0; SIZE size; //定义一个SIZE类型的结构
switch(message)
{case WM_PAINT:
Y=Y+tm.tmHeight+tm.tmExternalLeading;//计 算换行时下一行文本的输出坐标
hF_black=CreateFont //创建自定义字体
(60, //字体的高度
0, //由系统根据高宽比选取字体最佳宽度值
0,
//文本的倾斜度为0,表示水平
0,
//字体的倾斜度为0
FW_HEAVY,//字体的粗度,FW_HEAVY为最粗
hdc=BeginPaint(hwnd,&ps); SetTextColor(hdc,RGB(255,0,0));//设置文本颜色为红 色 GetTextMetrics(hdc,&tm); //获取缺省字体,写入tm 结构中
TextOut(hdc,X,Y,lpsz_1,strlen(lpsz_1)); // 使用当前字体输出文本
7.1 设置文本的设备环境 一、字体句柄 字体:描述所要显示的文本的大小、类型和外 形。 物理字体:它是为特殊设备设计的,因而是设 备相关的。 逻辑字体:它定义的字符集是设备无关的,它 可以精确标度,灵活性强,因此得到广泛应用。
字体
说明
ANSI_FIXED
ANSI标准的固定宽度的字体
ANSI_VAR
PAINTSTRUCT ps; TEXTMETRIC tm;//定义一个TEXTMETRIC结构, 用以记录字体信息 char lpsz_1[]="这是一行红色的、字体为 SYSTEM_FONT的文字,红色代表未来"; char lpsz_2[]="现在显示的是自定义绿色字体, 绿色代表生机勃勃"; char lpsz_3[]="这一行是蓝色的粗体字,蓝色代 表广阔的海洋和天空";
//返回加字符串宽度及
高度的SIZE数据结构的地址)
SIZE数据结构的定义
typedef struct tagSIZE
{ LONG cx;
LONG cy;
} SIZE;
例如,X轴起始坐标为cx0,后续文本起 始坐标cx1为:
cx1=cx0+size.cx; (b) 确定换行时文本坐标 (c)在tm指向的TEXTMETRICS结构中, 存有:
EndPaint(hWnd,&PtStr); return 0; case WM_DESTROY: //结束应用程序 PostQuitMessage(0); return 0; default://其他消息处理程序 return(DefWindowProc(hWnd,iMessage,wParam,lPa am)) ;}}
{ "这是第一行文本!", "这是第二行文本!!", "这是第三行文本!!!", "这是第四行文本!!!!", "这是第五行文本!!!!!", "这是第六行文本!!!!!!"
}; switch(iMessage) //处理消息
{ case WM_CREATE: //处理窗口创建消息 hDC=GetDC(hWnd) ; //获取当前设备表句柄 GetTextMetrics(hDC,&tm); //获取字体信息 nXChar=tm.tmAveCharWidth; //获取字符宽度
第七章 文本与字体
Windows经常 使用GDI进行文本输 出。在一定意义上 ,任何内容都可以 看成图形实体。
图形和文本并 没有明显的界限
使用定义好的与设备无关的字体 集, Windows就能维护它的设备无关 性,提供“所见即所得”的好处,即 屏幕所见与设备输出的文本是一样的。
文本 操作 过程
先要获得文本句柄 设置字体、字符大小、字符颜色等有关属性 将这些属性选入设备环境
面字体
选择系统字体的步骤如下: (1)定义字体句柄变量:
HFONT hF; //hF为字体的句柄 (2)调用函数GetStockObject获得系统字
体句柄 ,它返回的是系统的默认字体: hF= GetStockObject( ); (3)调用函数SelectObject将字体选入设 备环境: SelectObject(hdc,hF);
单位为0.1度
int nOrienation, //每个文字相对于页底的角度,
单位为0.1度
DWORD nWeight, //字体粗细度,范围为0~
1000
DWORD Dwltalic, //字体倾斜,则取非零
DWORD dwUnderline, //如果要求下划线,
则取非零
DWORD dwStrikeout, //如果要求中划线,
二、创建自定义字体
如果需要定义系统以外的字体,可以调用函数
GreateFont来创建: HFont=CreateFont
(int nHeight, //字体高度,0采用系统默认值,使
用逻辑单位
int nWidth,
//字体宽度,取0则由系统根
据高宽比取最佳值
int nEscapement, //每行文字相对于页底的角度,
static long nXChar, nYChar; HDC hDC; //定义指向设备上下文的句柄
short x; TEXTMETRIC tm;
short LnCount=6; PAINTSTRUCT PtStr; //定义指向包含 绘图信息的结构体变量
static char *textbuf[]=
系统定义的TEXTMETRIC结构的定义的结构如下:
typedef struct tagTEXTMETRIC
{
//tm
LONG tmHeight;
//字符高度
LONG tmAscent;
//字符基线以上高度
LONG tmDescent; //字符基线以下高度
LONG tmInternalLeading; //tmHeight制订的
字体及背景颜色的设置在开发过 程中非常重要。
7.2文本的输出过程
获取字体信息 格式化文本
(1)确定后续文本坐标 (2)确定换行时文本坐标 调用函数输出文本
一、获取字体信息 ➢ 输出文本之前,必须获取字体的信息,如字 符高度等,以确定输出格式和下一行字符的位 置。 ➢调用GetTextMetrics()获取字体的信息 GetTextMetrics (hdc,&tm); ➢tm为TEXTMETRICS结构存放字体的信息。
则取非零
DWORD dwCharset, //字体所属字符集
DWORD dwOutputPrecision,//输出精度,
一般取默认值OUT_DEFAULT_PRECIS
DWORD dwClipPrecision, //剪裁精度,常
取默认值CLIP_DEFAULT_PRECIS
DWORD dwQuality,
0,
//非斜体字
0,
/无下划线
0,
//无删除线
GB2312_CHARSET, //表示所用的字符ANSI_CHARSET
OUT_DEFAULT_PRECIS, //输出精度为缺省精度
CLIP_DEFAULT_PRECIS, //剪裁精度为缺省精度
DEFAULT_QUALITY,
//输出质量为缺省值
DEFAULT_PITCH|FF_DONTCARE,//字间距和
BYTE tmItalic;
//非0则为斜体
BYTE tmUnderlined; //非0则表示有下划线
BYTE tmStruckOut; //非0则表示带删除线
BYTE tmPitchAndFamily; //字体间距和字体族
BYTE tmCharSet;
//字符集
}TEXTMETRIC
二、格式化文本
(a) 确定后续文本坐标,由
GetTextExtentPoint32函数获取当前的字
符串的宽度,并存于SIZE。
BooL GetTextExtentPoint32
( HDC hdc,
LPCTSTR lpszString,//指定的字符串
int nLength, //字符串中的字符数
LPSIZE lpSize
字体系列使用缺省值
“楷体_GB2312"
//字体
SetTextColor(hdc,RGB(0,255,0));//设置文本颜色为绿色 SelectObject(hdc,hF_black);//将自定义字体选入设备环 境 GetTextMetrics(hdc,&tm); //获取字体的信息,并写入 tm结构中 TextOut(hdc,X,Y,lpsz_2,strlen(lpsz_2));//使用当前字体 输出文本 //换行继续输出文本,计算新行的起始Y坐标位置
LPCTSTR lpstring, //被显示的字符串
int nCount
//字符串的字节数
);
7.3 文本操作实例
实例1:在用户窗口上输出几行字符串,每当窗口接 收到WM_PAINT消息后,显示的文本都被刷新。 LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam) {
实例2:在窗口中分五行分别显示五行文本,以说明如 何自己创建字体的过程,以及在窗口的用户区中格式及 输出文本的方法。
LRESULT CALLBACK WndProc(HWND hwnd,UINT
message,WPARAM wParam,LPARAM lParam)
{ HDC hdc; HFONT hF_black,hF_big; //定义两种字体句柄
字符高度顶部的控件
LONG tmExternalLeading; //行间的间隔
LONG tmAveCharWidth;
//平均字符宽度
Baidu Nhomakorabea
LONG tmMaxCharWidth; //最大字符宽度
LONG tmWeight;
//字符的粗细度
LONG tmOverhang;//合成字体间附加的宽度
LONG tmDigitizedAspectX; //为输出设备设计的X
ANSI标准的可变宽度的字体
DEFAULT_GUI
当前GUI的默认字体
OEM_FIXED
由标准原设备制造商
(OEM)提供
DEVICE_DEFAULT 当前图形设备的字体
SYSTEM_FIXED
Windows的标准固定宽度
的字体
SYSTEM
Windows提供的可变宽度的字体
以上是系统提供的七种基本字体,其中 SYSTEM常作为默认字体 Win用它作为系统界
nYChar=tm.tmHeight+tm.tmExternalLeading; ReleaseDC(hWnd,hDC); //释放当前设备句柄
return 0; case WM_PAINT: //处理重画消息 hDC=BeginPaint(hWnd,&PtStr); //开始绘画 for(x=0;x<LnCount;x=x+1) TextOut(hDC,nXChar,nYChar *(1+x),textbuf[x],lstrlen(textbuf[x]));
//输出质量,一
般取默认值DEFAULT_QUALITY
DWORD dwPitchAndFamily, //字体名
)
三、设置字体和背景颜色 ➢ 设置字体颜色函数:
SetTextColor(hdc,crColor); ➢ 设置背景颜色函数:
SetBkColor(hdc,crColor);
crColor为设置的颜色
字符高度tmHeight 行间隔tmExternalLeading 。 (d)换行时,新一行文本的y坐标的增量 值为:
cy=tm.tmHeight+tm.tmExternalLeadi
ng;
三、文本输出
常用的文本输出函数TextOut,原型如下:
BOOL TextOut
(
HDC hdc,
int X, int Y, //字符串的起始坐标
轴尺寸
LONG tmDigitizedAspectY; //为输出设备设计的Y
轴尺寸
BCHAR tmFirstChar; //字体中第一个字符值
BCHAR tmLastChar; //字体中最后一个字符值
BCHAR tmDefaultChar; //代替不在字体中字符的字

BCHAR tmBreakChar; //作为分割符的字符
Y=Y+tm.tmHeight+5*tm.tmExternalLeading;
GetTextExtentPoint32(hdc,lpsz_2,strlen(lpsz_2) ,&size);//获取字符串的宽度 SetTextColor(hdc,RGB(0,0,255));//设置文本颜色为蓝色 TextOut(hdc,X,Y,lpsz_3,strlen(lpsz_3));//用当前字体输 出文本
相关文档
最新文档