首页计算机计算机软件VisualC++ 03 第3章 文本与字体.pptx

03 第3章 文本与字体.pptx

页数:29页文件大小:179.7 KB来源: VisualC++ppt课件

本课件对应课程第3章文本与字体,指出Windows通过GDI输出文本并说明图形与文本并无严格界限,随后介绍系统字体与逻辑字体的区别、选择系统字体的步骤以及用CreateFont创建自定义字体的方法,接着讲解字体颜色与背景色的设置,最后完整演示获取字体信息、格式化文本坐标与调用TextOut输出文本的全过程并给出应用程序实例。

第3章文本与字体教学重点页,聚焦字体、文本颜色、背景色等文本设备环境与格式化输出操作
文本输出概述页,指出Windows用GDI输出文本,图形与文本无严格界限并提供所见即所得
系统字体说明页,区分设备相关的物理字体与设备无关、可精确标度的逻辑字体
查看本课件的文字版(共 29 页,供检索与复制)

第1页:第3章教学重点

  • 教学重点1
  • 文本设备环境字体(系统
  • 自定义)
  • 文本颜色
  • 背景色2
  • 文本输出基本操作文本格式化
  • 文本输出函数

本页源文件仅提取到标题或少量文字,详细内容请对照本页图示。

第2页:文本输出概述

Windows经常使用GDI进行文本输出。 在一定意义上,任何内容都可以看成图形实体,图形和文本并没有明显的界限。 使用定义好的与设备无关的字体集,Windows就能维护它的设备无关性,提供“所见即所得”的好处,即屏幕所见与设备输出的文本是一样的。

第3页:3.1 系统字体

  • 3.1文本设备环境1
  • 系统字体字体:描述所要显示的文本的大小
  • 类型和外形
物理字体
是为特殊设备设计的,因而是设备相关的;
逻辑字体
定义的字符集是设备无关的,它可以精确标度,因此得到广泛应用。

第4页:系统字体类型

系统字体类型

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

第5页:选择系统字体步骤

3.1文本设备环境---系统字体选择系统字体的步骤:(1)定义字体句柄变量;

(2)调函数GetStockObject获得系统字体句柄,它返回的是系统的默认字体; (3)调用函数SelectObject将字体选入设备环境。

第6页:选择系统字体示例

3.1文本设备环境---系统字体程序举例:HFONT hFont;

// hFont为字体的句柄hFont = (HFONT)GetStockObject(SYSTEM_FIXED_FONT); SelectObject(hdc,hFont);

第7页:CreateFont函数(一)

3.1文本设备环境2、创建自定义字体可以调用函数CreateFont创建自定义字体。 HFONT CreateFont(int nHeight,

第8页:CreateFont函数(二)

3.1文本设备环境---创建自定义字体int fnWeight,

第9页:字体粗细与字符集

字体粗细与字符集

字体粗细度参数fnWeight常用取值
取值标识数值
FW_NORMAL400
FW_BOLD700
FW_HEAVY900

3.1文本设备环境---创建自定义字体参数fnWeight可选的一些值如下所示:FW_NORMAL 400FW_BOLD 700FW_HEAVY 900参数fdwCharSet定义的字符集有很多种,常用的有:ANSI_CHARSET、GB2312_CHARSET。

第10页:CreateFont函数(三)

3.1文本设备环境---创建自定义字体DWORD fdwOutputPrecision,

第11页:CreateFont调用示例

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);

第12页:设置字体颜色

3.1文本设备环境---字体颜色设置字体颜色

COLORREF SetTextColor(HDC hdc,COLORREF crColor程序举例:SetTextColor(hdc, RGB(255,0,0));

第13页:设置背景颜色

3.1文本设备环境---背景颜色设置背景颜色

COLORREF SetBkColor(HDC hdc,COLORREF crColor程序举例:SetBkColor(hdc, RGB(255,255,255));

第14页:3.2 文本输出过程

3.2文本的输出过程

  • 获取字体信息;
  • 格式化文本:确定后续文本坐标;

确定换行时文本坐标;

  • 调用函数输出文本。

本页源文件仅提取到标题或少量文字,详细内容请对照本页图示。

第15页:获取字体信息

3.2文本的输出过程---获取字体信息输出文本之前要获取字体的信息,如字符高度等,以确定输出格式和下一行字符的位置,可以调用下面的GetTextMetrics函数获取当前使用字体信息。

第16页:GetTextMetrics函数

3.2文本的输出过程---获取字体信息

BOOL GetTextMetrics(HDC hdc,LPTEXTMETRIC lptm); 调用该函数时,系统将当前字体信息拷贝到tm标识的TEXTMETRICS结构中。

第17页:TEXTMETRIC结构(一)

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;

第21页:GetTextMetrics示例

3.2文本的输出过程---获取字体信息程序举例:TEXTMETRIC tm;

GetTextMetrics(hdc, &tm);

第22页:确定后续文本坐标

3.2文本的输出过程---格式化文本(续行)确定后续文本坐标确定后续文本的坐标,应先获取当前的字符串的宽度,该工作由GetTextExtentPoint32函数完成,并把它存储于一个SIZE结构中。

第23页:GetTextExtentPoint32

3.2文本的输出过程---格式化文本(续行)

BOOL GetTextExtentPoint32(HDC hdc,LPCTSTR lpszString, 

第24页:续行坐标计算示例

3.2文本的输出过程---格式化文本(续行)程序举例:int cx0;cx1 = cx0 + sz.cx;

第25页:换行坐标计算

3.2文本的输出过程---格式化文本(换行)字符的高度与行间隔均存储在tm指向的TEXTMETRICS结构体中,通过计算当前行文本字符的高度与行间隔之和,即可得到换行时文本的起始坐标。

第26页:换行坐标计算示例

3.2文本的输出过程---格式化文本(换行)程序举例:int nLineHeight; TEXTMETRIC tm;

GetTextMetrics(hdc, &tm); nLineHeight = tm.tmHeight +tm.tmExternalLeading;

第27页:TextOut函数

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消息后,显示的文本每次都被重新刷新。