《第06讲 文本与字体.ppt》由会员分享,可在线阅读,更多相关《第06讲 文本与字体.ppt(17页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第第6 6讲讲 文本的输出方式与字体设置文本的输出方式与字体设置要点:要点:1、设置字体和背景,创建自定义字体、设置字体和背景,创建自定义字体2、设置文本信息,格式化文本、文本、设置文本信息,格式化文本、文本输出输出1文本与字体文本与字体 使用定义好的与设备无关的使用定义好的与设备无关的字体字体集,集,Windows就能维就能维护它的设备无关性护它的设备无关性 Windows经常使用经常使用GDI进行文本输出。在进行文本输出。在一定意义上,任何内容一定意义上,任何内容都可以看成都可以看成图形实体图形实体文本文本操作操作先要获得文本句柄先要获得文本句柄设置字体、字符大小、字符颜色等有关属性设置字
2、体、字符大小、字符颜色等有关属性将这些属性选入设备环境将这些属性选入设备环境一一 设置文本的设备环境设置文本的设备环境字体字体逻辑字体逻辑字体定义的字符集是定义的字符集是设备无关设备无关的,它可以精确标度,因的,它可以精确标度,因此得到广泛应用此得到广泛应用描述所要显示描述所要显示的文本的大小、的文本的大小、类型和外形类型和外形物理字体物理字体是为特殊设备设计的,因而是是为特殊设备设计的,因而是设备相关设备相关的的Win 系统系统提供了七种提供了七种基本字体基本字体字体字体 说明说明ANSI_FIXED ANSI标准的标准的固定固定宽度的字体宽度的字体ANSI_VAR ANSI标准的标准的可变
3、可变宽度的字体宽度的字体DEFAULT_GUI当前当前GUI的缺省字体的缺省字体OEM_FIXED 由标准原设备制造商由标准原设备制造商(OEM)提供提供DEVICE_DEFAULT当前图形设备的字体当前图形设备的字体SYSTEM_FIXEDWindows的标准的标准固定固定宽度的字体宽度的字体SYSTEM Windows提供的提供的可变可变宽度的字体宽度的字体常作为缺省字体常作为缺省字体 WinWin用它作为用它作为系统界面字体系统界面字体(1)(1)定义字体句柄变量:定义字体句柄变量:HFONT HFONT hFhF;/;/hFhF为字体的句柄为字体的句柄(2)(2)调函数调函数GetSt
4、ockObjectGetStockObject获得系统字体句柄获得系统字体句柄 它返回的是系统的缺省字体它返回的是系统的缺省字体 hFhF=GetStockObjectGetStockObject()():(3)(3)调用函数调用函数SelectObjectSelectObject将字体选入设备环将字体选入设备环境境 SelectObject(hdc,hFSelectObject(hdc,hF);选选择择系系统统字字体体的的步步骤骤1 设置文本的设备环境设置文本的设备环境2 创建自定义字体创建自定义字体 若需要定义系统以外的字体,可以调用函数若需要定义系统以外的字体,可以调用函数GreateF
5、ont自行自行创建创建 HFont=CreateFont(int nHeight,/字体高度,字体高度,0采用系统缺省值,使用逻辑单位采用系统缺省值,使用逻辑单位 int nWidth,/字体宽度,取字体宽度,取0则由系统根据高宽比取最佳值则由系统根据高宽比取最佳值 int nEscapement,/每每行行文字相对于页底的角度,文字相对于页底的角度,单位为单位为0.1度度 int nOrienation,/每每个个文字相对于页底的角度,文字相对于页底的角度,单位为单位为0.1度度 DWORD nWeight,/字体粗细度,范围为字体粗细度,范围为01000 DWORD Dwltalic,/如
6、果要求字体倾斜,则取非零如果要求字体倾斜,则取非零 DWORD dwUnderline,/如果要求下划线,则取非零如果要求下划线,则取非零 DWORD dwStrikeout,/如果要求中划线,则取非零如果要求中划线,则取非零 DWORD dwCharset,/字体所属字符集字体所属字符集 DWORD dwOutputPrecision,/输出精度,一般取缺省值输出精度,一般取缺省值OUT_DEFAULT_PRECIS DWORD dwClipPrecision,/剪裁精度,常取缺省值剪裁精度,常取缺省值CLIP_DEFAULT_PRECIS DWORD dwQuality,/输出质量,一般取
7、缺省值输出质量,一般取缺省值DEFAULT_QUALITY DWORD dwPitchAndFamily,/字体名字体名)可选的系统字符集:可选的系统字符集:ANSI_CHARSETANSI_CHARSETOEM_CHARSETOEM_CHARSETSYMBOL_CHARSETSYMBOL_CHARSETDEFAULT_CHARSETDEFAULT_CHARSETSHIFTJIS_CHARSETSHIFTJIS_CHARSET3 设置字体和背景颜色设置字体和背景颜色设置字体颜色:设置字体颜色:SetTextColor(hdc,crColor);设置背景颜色设置背景颜色:SetBkColor(h
8、dc,crColor);crColor为设置的颜色为设置的颜色字体字体及背景颜色背景颜色的设置在开发过的设置在开发过程中非常重要程中非常重要二二 文本的输出过程文本的输出过程确定后续文本坐标确定后续文本坐标确定换行时文本坐标确定换行时文本坐标文本输文本输出过程出过程获取字体信息获取字体信息格式化文本格式化文本调用函数输出文本调用函数输出文本1获取字体信息获取字体信息 输出文本之前要获取字体的信息,如字符高度等,以确定输出输出文本之前要获取字体的信息,如字符高度等,以确定输出格式和下一行字符的位置格式和下一行字符的位置2 格式化文本格式化文本换行时确定下一行文本的坐标换行时确定下一行文本的坐标需
9、要格式化需要格式化处理的情况处理的情况在文本行中确定后续文本的坐标在文本行中确定后续文本的坐标3 文本输出文本输出 常用的文本输出函数常用的文本输出函数TextOut原型如下:原型如下:BOOL TextOut(HDC hdc,int X,int Y,/X,Y为用户区中字符串的起始坐标为用户区中字符串的起始坐标 LPCTSTR lpstring,/lpstring为显示的字符串为显示的字符串 int nCount /nCount为字符串中的字节数为字符串中的字节数);MFC应用:文本设置与输出应用:文本设置与输出w设置文本的设备环境设置文本的设备环境 CPaintDC dc(this);w创建
10、新字体对象创建新字体对象 CFont MyFont;w创建自定义字体创建自定义字体 MyFont.CreateFontw设置字体背景透明设置字体背景透明 dc.SetBkMode w设置字体设置字体 dc.SetTextColor w文本输出文本输出 dc.TextOut w选择字体对象选择字体对象 dc.SelectObject【例例5-1】使用使用MFC,在用户窗口上输出几行字符串,当窗口接收,在用户窗口上输出几行字符串,当窗口接收到到WM_PAINT消息后,显示的文本每次都被重新刷新。消息后,显示的文本每次都被重新刷新。文本颜色文本颜色不同,字体大小不同不同,字体大小不同 1、创建工程并
11、生成对、创建工程并生成对话框话框项目名:项目名:FONT 项目类型:项目类型:MFC模板:模板:MFC应用程序应用程序 应用程序类型:基于应用程序类型:基于对话框对话框生成类:生成类:CFONTAppCFONTDlg 对话框对话框ID:IDD_FONT_DIALOG2、添加字符串变量、添加字符串变量w在 FONTDlg.h文件 中,选择 CFONTDlg类定义wclass CFONTDlg:public CDialogw/Constructionw public:wCFONTDlg(CWnd*pParent=NULL);w/声明输出文字的字符串声明输出文字的字符串wCString m_strS
12、how;w .w;w在在 FONTDlg.cpp文件文件 中,选择中,选择CFONTDlg的构造函数的构造函数wCFONTDlg,编写如下代码。,编写如下代码。wCFONTDlg:CFONTDlg(CWnd*pParent/*=NULL*/)w:CDialog(CFONTDlg:IDD,pParent)w .w/初始化初始化m_strShowwm_strShow=欲欲穷千里目,更上一层楼穷千里目,更上一层楼;w3、初始化字符串变量、初始化字符串变量4、修改、修改OnPaint函数(在对话框中添加文本)函数(在对话框中添加文本)w在在 FONTDlg.cpp文件文件 中,消息:中,消息:WM_P
13、AINT。函数:。函数:OnPaint()w编写如下代码。编写如下代码。wvoid CFONTDlg:OnPaint()w if(IsIconic()w .wwelsew /创建文本设备环境创建文本设备环境wCPaintDC dc(this);w /创建新字体对象创建新字体对象w CFont MyFont;w CFont MF2;w CFont MF3;w w /创建自定义字体创建自定义字体MyFontw MyFont.CreateFontw (w 30,/字体的高度字体的高度w 0,/由系统根据高宽比选取字体最佳宽度值由系统根据高宽比选取字体最佳宽度值w 0,/文本的倾斜度为文本的倾斜度为0
14、,表示水平,表示水平w 0,/字体的倾斜度为字体的倾斜度为0w FW_HEAVY,/字体的粗度,字体的粗度,FW_HEAVY为最粗为最粗w 0,/非斜体字非斜体字w 0,/无下划线无下划线w 0,/无删除线无删除线w ANSI_CHARSET,/表示所用的字符集为表示所用的字符集为ANSI_CHARSETw OUT_DEFAULT_PRECIS,/输出精度为缺省精度输出精度为缺省精度w CLIP_DEFAULT_PRECIS,/剪裁精度为缺省精度剪裁精度为缺省精度w DEFAULT_QUALITY,/输出质量为缺省值输出质量为缺省值w DEFAULT_PITCH|FF_DONTCARE,/使用
15、缺省值使用缺省值 粗体字粗体字 w L“宋体宋体”/字体名称字体名称w );w/创建自定义字体创建自定义字体MF2wMF2.CreateFont(40,0,0,0,FW_HEAVY,1,0,0,w GB2312_CHARSET,OUT_DEFAULT_PRECIS,w CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,w DEFAULT_PITCH|FF_DONTCARE,L方正舒体方正舒体);w/创建自定义字体创建自定义字体MF3wMF3.CreateFont(50,0,0,0,FW_HEAVY,0,0,0,w GB2312_CHARSET,OUT_DEFAULT_PR
16、ECIS,w CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,w DEFAULT_PITCH|FF_DONTCARE,L“华文新魏华文新魏);w/设设置字置字体背景透明(体背景透明(transparent)wdc.SetBkMode(TRANSPARENT);说明:字体与字符集有关说明:字体与字符集有关w dc.SelectObject(&MyFont);/红色字体红色字体w dc.SetTextColor(RGB(255,0,0);w dc.TextOut(30,10,m_strShow);w dc.SelectObject(&MF2);/绿色字体绿色字体w dc.S
17、etTextColor(RGB(0,255,0);w dc.TextOut(30,60,m_strShow);w w dc.SelectObject(&MF3);/蓝色字体蓝色字体w dc.SetTextColor(RGB(0,0,255);w dc.TextOut(30,120,m_strShow);w w dc.SelectObject(&MF2);/绿色字体绿色字体w dc.SetTextColor(RGB(200,0,255);w dc.TextOut(30,180,m_strShow);w CDialog:OnPaint();www例例6-1小结:小结:步骤步骤 类类 函数与变量函数与变量w创建工程并生成对话框创建工程并生成对话框 CAboutDlg,CFONTApp,CFONTDlgw添加字符串变量添加字符串变量 FONTDlg.hw初始化字符串变量初始化字符串变量 CFONTDlg CFONTDlgw修改修改OnPaint函数(设置并显示文本)函数(设置并显示文本)CFONTDlg OnPaint
限制150内