页数:29页文件大小:179.7 KB来源: VisualC++ppt课件
本课件对应课程第3章文本与字体,指出Windows通过GDI输出文本并说明图形与文本并无严格界限,随后介绍系统字体与逻辑字体的区别、选择系统字体的步骤以及用CreateFont创建自定义字体的方法,接着讲解字体颜色与背景色的设置,最后完整演示获取字体信息、格式化文本坐标与调用TextOut输出文本的全过程并给出应用程序实例。
本页源文件仅提取到标题或少量文字,详细内容请对照本页图示。
Windows经常使用GDI进行文本输出。 在一定意义上,任何内容都可以看成图形实体,图形和文本并没有明显的界限。 使用定义好的与设备无关的字体集,Windows就能维护它的设备无关性,提供“所见即所得”的好处,即屏幕所见与设备输出的文本是一样的。
系统字体类型
| 说明 | 字体标识 |
|---|---|
| ANSI标准的固定宽度的字体 | ANSI_FIXED_FONT |
| ANSI标准的可变宽度的字体 | ANSI_VAR_FONT |
| 当前GUI的默认字体 | DEFAULT_GUI_FONT |
| 由标准原设备制造商(OEM)提供 | OEM_FIXED_FONT |
| 当前图形设备的字体 | DEVICE_DEFAULT_FONT |
| Windows的标准固定宽度的字体 | SYSTEM_FIXED_FONT |
| Windows提供的可变宽度的字体 | SYSTEM_FONT |
3.1文本设备环境---系统字体说明字体ANSI标准的固定宽度的字体ANSI_FIXED_FONTANSI标准的可变宽度的字体ANSI_VAR_FONT当前GUI的默认字体DEFAULT_GUI_FONT由标准原设备制造商(OEM)提供OEM_FIXED_FONT当前图形设备的字体DEVICE_DEFAULT_FONTWindows的标准固定宽度的字体SYSTEM_FIXED_FONTWindows提供的可变宽度的字体SYSTEM_FONT
3.1文本设备环境---系统字体选择系统字体的步骤:(1)定义字体句柄变量;
(2)调函数GetStockObject获得系统字体句柄,它返回的是系统的默认字体; (3)调用函数SelectObject将字体选入设备环境。3.1文本设备环境---系统字体程序举例:HFONT hFont;
// hFont为字体的句柄hFont = (HFONT)GetStockObject(SYSTEM_FIXED_FONT); SelectObject(hdc,hFont);3.1文本设备环境2、创建自定义字体可以调用函数CreateFont创建自定义字体。 HFONT CreateFont(int nHeight,
3.1文本设备环境---创建自定义字体int fnWeight,
字体粗细与字符集
| 取值标识 | 数值 |
|---|---|
| FW_NORMAL | 400 |
| FW_BOLD | 700 |
| FW_HEAVY | 900 |
3.1文本设备环境---创建自定义字体参数fnWeight可选的一些值如下所示:FW_NORMAL 400FW_BOLD 700FW_HEAVY 900参数fdwCharSet定义的字符集有很多种,常用的有:ANSI_CHARSET、GB2312_CHARSET。
3.1文本设备环境---创建自定义字体DWORD fdwOutputPrecision,
3.1文本设备环境---创建自定义字体HFONT hFont;
hFont = CreateFont(20,0,0,0, FW_NORMAL,0,0,0, GB2312_CHARSET,OUT_DEFAULT_PRECIS,CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,“仿宋_GB2312”); SelectObject(hdc,hFont);3.1文本设备环境---字体颜色设置字体颜色
COLORREF SetTextColor(HDC hdc,COLORREF crColor程序举例:SetTextColor(hdc, RGB(255,0,0));3.1文本设备环境---背景颜色设置背景颜色
COLORREF SetBkColor(HDC hdc,COLORREF crColor程序举例:SetBkColor(hdc, RGB(255,255,255));3.2文本的输出过程
确定换行时文本坐标;
本页源文件仅提取到标题或少量文字,详细内容请对照本页图示。
3.2文本的输出过程---获取字体信息输出文本之前要获取字体的信息,如字符高度等,以确定输出格式和下一行字符的位置,可以调用下面的GetTextMetrics函数获取当前使用字体信息。
3.2文本的输出过程---获取字体信息
BOOL GetTextMetrics(HDC hdc,LPTEXTMETRIC lptm); 调用该函数时,系统将当前字体信息拷贝到tm标识的TEXTMETRICS结构中。3.2文本的输出过程---获取字体信息
typedef struct tagTEXTMETRIC{ LONG tmHeight;//字符基线以上高度LONG tmDescent;LONGtmExternalLeading; 第18页:TEXTMETRIC结构(二)
3.2文本的输出过程---获取字体信息LONG tmAveCharWidth;
第19页:TEXTMETRIC结构(三)
3.2文本的输出过程---获取字体信息BCHAR tmFirstChar;
第20页:TEXTMETRIC结构(四)
3.2文本的输出过程---获取字体信息BYTE tmUnderlined;TEXTMETRIC;
3.2文本的输出过程---获取字体信息程序举例:TEXTMETRIC tm;
GetTextMetrics(hdc, &tm);3.2文本的输出过程---格式化文本(续行)确定后续文本坐标确定后续文本的坐标,应先获取当前的字符串的宽度,该工作由GetTextExtentPoint32函数完成,并把它存储于一个SIZE结构中。
3.2文本的输出过程---格式化文本(续行)
BOOL GetTextExtentPoint32(HDC hdc,LPCTSTR lpszString, 第24页:续行坐标计算示例
3.2文本的输出过程---格式化文本(续行)程序举例:int cx0;cx1 = cx0 + sz.cx;
3.2文本的输出过程---格式化文本(换行)字符的高度与行间隔均存储在tm指向的TEXTMETRICS结构体中,通过计算当前行文本字符的高度与行间隔之和,即可得到换行时文本的起始坐标。
3.2文本的输出过程---格式化文本(换行)程序举例:int nLineHeight; TEXTMETRIC tm;
GetTextMetrics(hdc, &tm); nLineHeight = tm.tmHeight +tm.tmExternalLeading;3.2文本的输出过程---文本输出常用的文本输出函数TextOut原型如下
BOOL TextOut(HDC hdc,int X, int Y,//用户区中字符串的起始坐标LPCTSTR lpString, 第28页:TextOut调用示例
3.2文本的输出过程---文本输出程序举例:HDC hDC;
TextOut( hDC,20,50,"Hello VC",strlen("Hello VC"));
第29页:例3-1文本输出
3.3应用程序举例【例3-1】在用户窗口上输出几行字符串,当窗口接收到WM_PAINT消息后,显示的文本每次都被重新刷新。
下载地址:{{downurl}}
{{{a}}}
{{#b}}{{{b}}}
{{/b}} {{/title}} {{#nolog}}登陆注册
{{/nolog}} {{#djsx}}点我刷新
{{/djsx}} {{#gocz}} {{/gocz}} {{#ffqr}} {{/ffqr}}