资源预览内容
第1页 / 共19页
第2页 / 共19页
第3页 / 共19页
第4页 / 共19页
第5页 / 共19页
第6页 / 共19页
第7页 / 共19页
第8页 / 共19页
第9页 / 共19页
第10页 / 共19页
亲,该文档总共19页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
联系方式:www.rzchina.net北京源智天下科技有限公司第九讲:第九讲:文本与字体 杨章伟杨章伟e-mail:yang505412163.com1-2北京源智天下科技有限公司联系方式:www.rzchina.net课程内容安排课程内容安排文本编程简介文本编程简介 使用使用GDI对象自定义字体对象自定义字体 字体的使用字体的使用 综合练习综合练习思考和习题思考和习题 1-3北京源智天下科技有限公司联系方式:www.rzchina.net文本编程简介文本编程简介 CString类是字符串操作的主要是字符串操作的主要类,MFC中将中将对字符串的操字符串的操作都封装在作都封装在Cstring类中。由于它提供了丰富的操作字符串的中。由于它提供了丰富的操作字符串的成成员函数,因此函数,因此对于字符串操作,用于字符串操作,用Cstring类是很方便的。是很方便的。下面列出了几个最常用的成下面列出了几个最常用的成员函数。函数。void Empty( ):不:不带任何参数,任何参数,该成成员函数的作用是将某个函数的作用是将某个字符串的内容清空。字符串的内容清空。CString Left( int nCount ):该成成员函数的作用是取指定字函数的作用是取指定字符串的左面几个字符。参数符串的左面几个字符。参数nCount表示取字符的个数,表示取字符的个数,执行行该成成员函数成功后,返回一个常量字符串。函数成功后,返回一个常量字符串。CString Right( int nCount ):该成成员函数的作用是取指定函数的作用是取指定字符串的右面几个字符。参数字符串的右面几个字符。参数nCount表示取字符的个数,表示取字符的个数,执行行该成成员函数成功后,返回一个常量字符串。函数成功后,返回一个常量字符串。void Format( LPCTSTR lpszFormat, . )和和void Format( UINT nFormatID, . ):这两个成两个成员函数的作用是得到一个格函数的作用是得到一个格式化字符串式化字符串 。int GetLength( ):该成成员函数的作用是取得字符串的函数的作用是取得字符串的长度。函数度。函数调用成功返回一个整型用成功返回一个整型值。1-4北京源智天下科技有限公司联系方式:www.rzchina.net使用使用GDI对象自定义字体对象自定义字体 GDI自定自定义字体的字体的类是是CFont。创建字体建字体对象,在使用之前必象,在使用之前必须用函数用函数CreateFont、CreateFontIndirect、CreatePointFont或或CreatePointFontIndirect初始化,其用法如下所示。初始化,其用法如下所示。CFont:CreateFont:创建具有指定属性的字体。建具有指定属性的字体。CFont:CreateFontIndirect:创建建拥有有LOGFONT结构所指定的属性的字体。构所指定的属性的字体。CFont:CreatePointFont:提供一种:提供一种创建指定字体名建指定字体名和尺寸的字体的和尺寸的字体的简单方法,自方法,自动将高度将高度转换为pDC所指所指的的设备描述表中所用的描述表中所用的逻辑单位位 1-5北京源智天下科技有限公司联系方式:www.rzchina.net自定义字体示例自定义字体示例例如,下面代码定义了字体。例如,下面代码定义了字体。CFont fn;fn.CreatePointFont(120,楷体楷体);dc.SelectObject(&fn);CreatePointFont是是产生字体最生字体最简单的方法,它的第二个参的方法,它的第二个参数是字体的名字,具体系数是字体的名字,具体系统中装了哪些字体,可以打开中装了哪些字体,可以打开记事事本,本,单击其中的其中的【格式格式】|【字体字体】命令就可以命令就可以查到了。到了。 1-6北京源智天下科技有限公司联系方式:www.rzchina.net实现简单文字处理实现简单文字处理 本节主要通过一个具体的实例来介绍字体的使用方法。该实本节主要通过一个具体的实例来介绍字体的使用方法。该实例所要实现的功能是一个简单的文字处理程序,用户由键例所要实现的功能是一个简单的文字处理程序,用户由键盘敲入字符并显示在屏幕上,如果按的是退格键则删除一盘敲入字符并显示在屏幕上,如果按的是退格键则删除一个字符,若按的是回车键则另起一行继续输入字符。简单个字符,若按的是回车键则另起一行继续输入字符。简单来说,该实例的实现流程如图来说,该实例的实现流程如图9-1所示。所示。1-7北京源智天下科技有限公司联系方式:www.rzchina.net1-8北京源智天下科技有限公司联系方式:www.rzchina.net创建设备环境创建设备环境 在在OnCreate函数中的代码如下所示。创建设备环境即设置在函数中的代码如下所示。创建设备环境即设置在主窗体中显示的文本的字体、大小等相关信息,以便输入文主窗体中显示的文本的字体、大小等相关信息,以便输入文本时显示,实现代码如下所示。本时显示,实现代码如下所示。 CClientDC dc(this);/创建建设备环境境CFont fn;fn.CreatePointFont(200,华文行楷文行楷);/创建字体建字体TEXTMETRIC tm;/定定义变量量dc.SelectObject(&fn);/将字体将字体选入入设备环境境dc.GetTextMetrics(&tm);/获取当前字体信息取当前字体信息CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight);/创建脱字符建脱字符ShowCaret();1-9北京源智天下科技有限公司联系方式:www.rzchina.net加入加入WM_CHAR消息消息 在工程的在工程的CMyView类中加入类中加入WM_CHAR消息的处理函数消息的处理函数OnChar。在在OnChar函数中,要根据用户在键盘中输入的字符的不同函数中,要根据用户在键盘中输入的字符的不同分别进行处理。如果是退格键,那么删除一个字符。如果分别进行处理。如果是退格键,那么删除一个字符。如果是回车键,那么另起一行,到下一行继续输入字符。如果是回车键,那么另起一行,到下一行继续输入字符。如果是其他的字符,那么将依次显示在窗口上。是其他的字符,那么将依次显示在窗口上。 1-10北京源智天下科技有限公司联系方式:www.rzchina.net处理特殊字符处理特殊字符 在一个文字处理程序中,不仅仅要处理用户输入的正文在一个文字处理程序中,不仅仅要处理用户输入的正文内容,还需要处理一些控制符。例如,当用户输入回车内容,还需要处理一些控制符。例如,当用户输入回车键时,程序要能判断其是否是控制符,并做相应的换行键时,程序要能判断其是否是控制符,并做相应的换行操作。当用户输入退格符时,程序要能完成删除前一个操作。当用户输入退格符时,程序要能完成删除前一个字符的功能,这就涉及到特殊字符的处理字符的功能,这就涉及到特殊字符的处理 。1-11北京源智天下科技有限公司联系方式:www.rzchina.net处理回车键处理回车键 读读者者知知道道,字字符符串串最最初初是是在在(0,0)的的位位置置输输出出的的,当当回回车车换换行行时时x坐坐标标值值不不变变,y坐坐标标值值增增长长,每每次次增增长长的的高高度度至至少少是是设设备备描描述述表表中中字字体体的的高高度度。代代码码中中的的0x0d代代表表回回车车符符,也也可可以用以用15表示,表示,0x08代表退格符。代表退格符。在在Onchar函数中可输入如下代码实现对回车键的处理。函数中可输入如下代码实现对回车键的处理。if(0x0d=nChar)/输入入为回回车键m_ptOrigin.x=0;/输出初始位置的出初始位置的x坐坐标清零清零m_ptOrigin.y+=tm.tmHeight;/输出初始位置出初始位置的的y坐坐标加上加上该行的高度行的高度m_strInput.Empty();/输出清空出清空 1-12北京源智天下科技有限公司联系方式:www.rzchina.net处理退格键处理退格键 退格键的处理较为复杂,其实现的是每按一次键应删除屏幕退格键的处理较为复杂,其实现的是每按一次键应删除屏幕上的一个字。但是这样实现起来很难,所以此处换种方法,上的一个字。但是这样实现起来很难,所以此处换种方法,将字符串以屏幕背景色输出,将原来屏幕上的一行字覆盖。将字符串以屏幕背景色输出,将原来屏幕上的一行字覆盖。由于覆盖在上面的字符串颜色和屏幕的颜色相同,因此看由于覆盖在上面的字符串颜色和屏幕的颜色相同,因此看起来整行字不见了。然后将字符串的最后一个字符删除,起来整行字不见了。然后将字符串的最后一个字符删除,将原来设备描述表中的颜色取回来,再输出字符串,这样将原来设备描述表中的颜色取回来,再输出字符串,这样给人的感觉就好像是删掉一个字符。在给人的感觉就好像是删掉一个字符。在Onchar函数中可函数中可输入如下代码实现对退格键的处理。输入如下代码实现对退格键的处理。1-13北京源智天下科技有限公司联系方式:www.rzchina.net示例代示例代码码else if(0x08=nChar)COLORREF oldClr; /将文字将文字颜颜色色设设置置为为背景背景色,并将原来色,并将原来颜颜色保留到色保留到oldClr中中oldClr=dc.SetTextColor(dc.GetBkColor();/用背景用背景色将字符串再色将字符串再输输出一遍,相当于将字符串擦去出一遍,相当于将字符串擦去dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strInput);/将文字将文字颜颜色色设设置置为为正常正常颜颜色色dc.SetTextColor(oldClr);/将字符串最后的一将字符串最后的一个字符去掉个字符去掉m_strInput=m_strInput.Left(m_strInput.GetLength()-1);1-14北京源智天下科技有限公司联系方式:www.rzchina.net处理其他字符处理其他字符 在在OnChar函数中处理其他的字符,并且不断调整光标闪烁的位置。函数中处理其他的字符,并且不断调整光标闪烁的位置。由于每输入一个字符,光标都要往后移动,所以应该再定义一个局由于每输入一个字符,光标都要往后移动,所以应该再定义一个局部变量部变量CPoint pt,用来记录光标显示的位置,代码如下所示。,用来记录光标显示的位置,代码如下所示。else/不是如上的几种情况则不是如上的几种情况则m_strInput+=nChar;/接收其他字符的输入接收其他字符的输入CSize sz=dc.GetTextExtent(m_strInput);/创建对创建对象并初始化象并初始化CPoint pt(sz.cx,m_ptOrigin.y);/创建对象并设创建对象并设置输出位置置输出位置SetCaretPos(pt);/设置输出位置设置输出位置dc.TextOut(m_ptOrigin.x,m_ptOrigin.y,m_strInput);/在对应位置输出在对应位置输出dc.SelectObject(pOldFn);/处理结束处理结束1-15北京源智天下科技有限公司联系方式:www.rzchina.net示例代码示例代码01 void CMyView:OnLButtonUp(UINT nFlags, CPoint point) 02 03/ TODO: Add your message handler code here and/or call default04CBrush br(RGB(0,0,255);/格式化画格式化画刷刷05CClientDC dc(this);/选入入设备描描述表述表06CBrush *pOldBr=dc.SelectObject(&br);07dc.Rectangle(CRect(m_ptOrigin,point);/画画矩形矩形08dc.SelectObject(pOldBr);/选择对象象09CView:OnLButtonUp(nFlags, point);10 1-16北京源智天下科技有限公司联系方式:www.rzchina.net运行运行结结果果在在Visual C+ 6.0的集成开发环境下编译运行上述程序代码,的集成开发环境下编译运行上述程序代码,其结果如图其结果如图9-5所示。读者可在其中输入文本,文本为隶所示。读者可在其中输入文本,文本为隶书,并且在输入过程中可使用书,并且在输入过程中可使用【Enter】键往下跳一行,键往下跳一行,使用使用【Backspace】键删除一个字符。键删除一个字符。 1-17北京源智天下科技有限公司联系方式:www.rzchina.net执执行流程行流程1-18北京源智天下科技有限公司联系方式:www.rzchina.net综合练习综合练习 建立一个工程实现字体霓虹灯效果,即在一个工程中输建立一个工程实现字体霓虹灯效果,即在一个工程中输出用户指定大小的文字,并每隔出用户指定大小的文字,并每隔0.5秒变换一种颜色,秒变换一种颜色,使其具有霓虹灯的效果,实现效果如图使其具有霓虹灯的效果,实现效果如图9-15所示。所示。 1-19北京源智天下科技有限公司联系方式:www.rzchina.net思考和习题思考和习题如何理解在如何理解在Visual C+中进行中进行Windows文本编程的基文本编程的基础概念?础概念?在在Visual C+中进行中进行Windows文本编程要使用到的类文本编程要使用到的类主要有哪些?主要有哪些?使用图形设备接口使用图形设备接口GDI对象定义字体的实现步骤主要是对象定义字体的实现步骤主要是什么?什么?设计一个功能较完整的文本编辑器,要实现文本的编辑、设计一个功能较完整的文本编辑器,要实现文本的编辑、删除功能,还要实现对回车键、退格键等特殊字符的处删除功能,还要实现对回车键、退格键等特殊字符的处理。理。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号