




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第8章 MFC常用类MFC提供了大量封装好的类,其中有一些类不经常使用,但有一些类使用的频率要高一些。这些类用于处理字符串、日期和时间、文件操作以及异常等。本章将分别介绍这些类,通过本章的学习,读者可以熟悉MFC的常用类,并熟练使用这些MFC常用类。8.1 字符串类(CString)CString类是一种用途广泛的数据类型。CString类简化了MFC中的许多操作,使得操作字符串更加方便。下面将详细介绍CString类对字符串的具体操作。8.1.1 创建字符串对象CString对象采用了动态分配内存的机制。也就是说,在创建CString对象时,不需对该对象指明内存大小,CString会根据实际
2、情况动态地进行分配。创建一个CString类对象并为其赋值的方法有以下几种方法。第一种方法是先构造一个CString类的对象,然后再使用赋值语句为其赋值。第二种方法是在构造CString类对象的同时,直接为其赋值。第三种方法是在构造CString类对象的同时,利用引用来的值为其赋值。第四种方法是在构造CString类对象的同时,采用单字符为其赋值。第五种方法是在构造CString类对象的同时,产生了一个字符串。8.1.2 CString类的成员函数在CString类中,存在大量对字符串进行各种操作的函数。CSting类中常用函数及其说明如下表所示。8.1.3 字符串的大小写转换在实际操作中,经
3、常会将字符串进行大小写的转换。CString类中进行大小写转换的函数分别是:MakeUpper()和MakeLower()函数。其中,MakeUpper()是大写转化函数,MakeLower()小写转化函数。【示例8-1】将指定字符串进行大写转换。运行程序,输出结果为“HELLO!”。【示例8-2】将指定字符串进行小写转换。运行程序,输出结果为“hello!”。由上述两个输出结果看出,MakeUpper()和MakeLower()函数只对字母进行相应的转换,其他字符不会受到任何影响。8.1.4 字符串的连接进行字符串的连接有两种方法:一是直接使用“+”进行直接连接,二是使用Insert()函数
4、进行特殊的插入。下面通过实例对这两种方法进行具体介绍。1“+”连接字符串使用“+”连接字符串是最常用的连接字符串的方法。【示例8-3】使用“+”连接字符串。运行程序,输出结果str3为Hello,而str4为lloHe。由程序结果可以看出,使用“+”进行字符串连接时,是在“+”前面字符串的末尾加上“+”后面的字符串。2Insert()函数在连接字符串时,并不一定都是在字符串的末尾进行连接。此时,应该使用Insert函数。Insert()函数有两种原型。(1)第一种原型如下:其中,nIndex用来表示插入字符串的位置,ch表示将要插入的字符串。该函数的返回值int,表示改变后的字符串的长度。(2
5、)第二种原型如下:其中,其中,nIndex用来表示插入字符串的位置,pstr表示需要插入的子链的指针。该函数的返回值int,表示改变后的字符串的长度。8.1.5 字符串的比较字符串的比较是根据字母对应的ASCII值。当两个字符串进行进行比较时,首先从第一个字符开始进行比较。如果两个字符串的第一个字母的ASCII值相同,则比较第二个字母。依此类推,直到比较完为止。在CString类中,比较字符串的函数有两个,分别如下: 和其中,Compare()函数在比较时区分大小写,而CompareNoCase()函数则不区分大小写。8.1.6 字符串的提取在CString类中,提取字符串可以使用Left()
6、、Mid()、Right()3种函数。三者分别从左边、中间和右边开始提取字符串。3种函数的原型分别如下:其中,nCount表示开始提取字符串的长度,nFirst代表要提取的开始索引位置。8.1.7 字符串的查找在CString中,Find()和ReverseFind()函数用于字符串指定位置的查找。Find()函数是从一个字符串中查找字符串。Find()函数的原型有几中,分别如下:其中,ch表示要查找的字符串,nStart表示开始查找的索引值。Find()函数返回查找到的字符串的位置。ReverseFind()函数是从一个字符串的末尾开始查找字符。ReverseFind()函数的原型如下:其中
7、,ch表示要查找的字符。该函数的返回值是查找到的字符串的索引值。8.1.8 字符串的移除在CString类中,想要移除字符串可以调用Remove()和Delete()函数。其中,Remove()用于从字符串中移除特定的字符。Remove()函数的原型如下:其中,ch表示想要移除的字符。该函数的返回值是返回从字符串中移走的字符数。如果字符串没有变化,则返回0。8.1.9 CString类的格式化在前面几个例子中,已经用到过Format()函数。该函数就是用于实现字符串的格式化。Format()函数的原型如下:其中,fromat用于表示格式化字符串,args表示输出文本。从上述代码分析,格式化字符
8、串由三部分组成:、前的表述性文字和后各种格式字符。在Visual C+中,后的格式字符有以下几种,如下表所示。8.1.10 CString类的类型转换CString类型的数据可以转换成其他类型的数据。1CString类型转换成整型如果将CString类型的数据转换成整型数据,可以使用atoi()函数。atoi()函数的原型如下:【示例8-14】CString类型转换成整型。运行程序,输出转换后的整型数据114。2CString类型转换成char*类型如果将CString类型的数据转换成char*odga,可以有多种方法。使用GetBuffer()函数。GetBuffer()函数的原型如下:【示
9、例8-15】使用GetBuffer()函数将CString类型转换类型。使用memcpy()函数。memcpy()函数的原型如下:【示例8-16】使用memcpy()函数将CString类型转换类型。8.2 日期、时间类在Visual C+中,有关日期和时间的类有两个:CTime类和CTimeSpan类。CTime表示是的绝对时间,而CTimeSpan表示的是时间差。本节将分别对这个两个类进行详细介绍。8.2.1 CTime类CTime类计算的时间是从1970年1月1日之后的秒数。由于CTime类没有基类,因此它可以在程序中任意位置调用。通常情况下,构造一个CTime对象采用如下方式:【示例8
10、-18】构造一个CTime类对象。上述内容表示的时间是2008年5月19日22时18分33秒。如果想要获取当时系统时间,可以使用GetCurrentTime()函数,代码如下:8.2.1 CTime类在CTime类中,还有许多和GetCurrentTime()类似的函数,如表8.3所示。使用CTime类获取的当前系统时间可以转化成字符串,此时可以使用CTime类的Format函数。Format函数的原型有以下两种:8.2.2 CTimeSpan类CTimeSpan类主要用于保存两个时间之间的间隔。CTimeSpan类的构造函数有以下三种:其中,常用的是第三种方法。【示例8-20】构造一个CTi
11、meSpan类的对象。8.2.1 CTime类在CTimeSpan类中,有一些常用的函数,如下表所示。8.2.3 计时器计时器的作用就是用于计时,当到达规定的时间点时,会触发事先设置好的动作。SetTimer函数用于创建一个计时器,KillTimer函数用于销毁一个计时器。计时器属于系统资源,使用完应及时销毁。SetTimer函数的原型如下:nIDEvent:表示计时器的ID。由于一个程序中可能存在多个计时器,因此用此ID号进行标记。nElapse:表示时间间隔,单位是ms(毫秒)。第三个参数看起来很复杂,一般情况下,设置其为NULL。8.2.3 计时器【示例8-24】使用SetTime函数创
12、建一个计时器。由于计时器属于系统资源,因此在使用完应该及时地销毁。在Visual C+中,使用KillTimer函数来销毁所创建的计时器。KillTimer函数的原型如下:【示例8-25】使用KillTimer函数销毁上例所创建的计时器。读者通过阅读上面的内容可以发现,程序只是创建了计时器,而并没有说明计时器到达规定时间所做的操作。此时,应该使用OnTimer函数对计时器进行消息处理。8.3 文件操作类(CFile)Visual C+提供的CFile类封装了对文件打开和关闭、读写和定位、删除、获取文件信息等操作。CFile类是最基本的文件操作类,它的派生类是CObject。本节将具体介绍CFi
13、le如何对文件进行操作。8.3.1 文件的打开和关闭CFile类有两种构造函数,使用默认的构造函数创建一个CFile对象后,还需要使用Open()函数将文件打开。使用带参数的构造函数创建一个CFile对象的同时,就将该文件打开了。下面对这两种打开文件的方式分别进行介绍。1使用默认的构造函数打开文件CFile类默认的构造函数原型如下:如果在构造CFile类的对象采用这个默认的构造函数,那么仅仅创建了一个对象,而并没有打开文件。此时,需要用到Open()函数。Open()函数的原型如下:lpszFileName:用于指定文件名。nOpenFlags:指定打开文件的方式。该参数可以几个值的组合,以“
14、”进行分隔。该参数的取值如下表所示。pError:指向CFileException对象,用于异常操作。1使用默认的构造函数打开文件2使用带有一个参数的构造函数打开文件CFile类有两个带参数的构造函数。其中,带一个参数的构造函数的原型如下:该构造函数已经打开了一个文件,参数hFile就是打开文件的文件句柄。该函数将新创建的CFile对象绑定到一个已经打开的文件句柄上。HFile可以赋值给CFile的成员变量m_hFile。HFile也可以使用CreateFile()函数打开。CreateFile()函数的原型如下:2使用带有一个参数的构造函数打开文件hTemplateFile:为GENERIC
15、_READ访问的模式指定一个句柄到模板文件。lpFileName:指向一个空结尾字符串。该参数指定了用于创建或打开句柄的对象。dwDesiredAccess:指定对象的访问方式。程序可以获得读访问权,写访问权,读写访问权或者是询问设备(device query)访问权。dwShareMode:设置共享模式。lpSecurityAttributes:指向一个SECURITY_ATTRIBUTES结构的指针用于确定如何在子进程中继承这个句柄。如果这个参数是NULL,则该句柄不可继承。dwCreationDisposition:指定当文件存在或者不存在时如何动作。dwFlagsAndAttribut
16、es:为文件指定属性和标志位。3使用带有两个参数的构造函数打开文件CFile类的第二个带有参数的构造函数有两个参数,其原型如下:lpszFileName:表示将要打开的文件的路径名。nOpenFlags:表示文件的共享和存取模式。该参数与Open()函数的nOpenFlags参数完全相同。【示例8-29】使用带有两个参数的构造函数打开文件。8.3.3 文件的读写在CFile类中,有专门对文件进行读写操作的函数Read()和Write()。其中,Read()函数的原型如下:lpBuf:表示接收数据缓冲区的指针。nCount:指定读操作的字节数。Write()函数的原型如下:lpBuf:表示接收数
17、据缓冲区的指针。nCount:指定写操作的字节数。8.3.3 文件的读写8.3.4 文件的定位使用CFile类对文件进行读写操作时,可以进行随机读写。调用CFile类的Seek()函数,可以定位文件指针定位的位置,而调用SeekToBegin()和SeekToEnd()函数可以来回移动文件指针。Seek()函数的原型如下:lOff:指定从nForm位置开始的字节偏移量。nForm:指定文件的定位方式。nForm的取值有以下几种。CFile:begin:文件的开始位置。CFile:current:文件的当前位置。CFile:end:文件的末尾位置。函数的返回值是文件定位后指针的绝对位置。8.3.
18、4 文件的定位SeekToBegin()函数的作用是将文件的定位指针移动到文件的开始位置,其函数原型如下:SeekToEnd()函数的作用是将文件的定位指针移动到文件的开始位置,其函数原型如下:如果想要获取文件的定位指针所指向的位置,可以使用GetPosition()函数。GetPosition()函数的原型如下:如果想要获取文件的大小,可以使用GetLength()函数。GetLength()函数的原型如下:如果想要设置文件的大小,可以使用SetLength()函数。SetLength()函数的原型如下:8.3.5 文件的状态使用CFile类的成员函数,可以对文件的状态进行相关操作。如果想要获取文件的状态,可以使用GetStatus()函数。GetStatus()函数有两种原型,第一种函数原型如下:rStatus:指向CFileStatus结构的指针。CFileStatus结构成员如下表所示。8.3.5 文件的状态第二种函数原型如下:lpszFileName:指定文件名。rStatus:指向CFileStatus结构的指针。【示例8-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025陕西省安全员-B证考试题库附答案
- 劳务养猪合同范本
- 出售进口镗床合同范本
- 中国超市合同范本
- 医疗诊所股转让合同范本
- 保留期限合同范本
- 债务免除合同范例
- 公司楼房合同范本
- 制作加工合同范本模板
- 印尼外来投资合同范本
- 人工智能对舆情管理的价值
- 地理-河南省部分重点高中九师联盟2024-2025学年高三下学期2月开学考试试题和答案
- 老年护理相关法律法规
- 《陶瓷工艺技术》课件
- 变更强制措施的申请书
- 供电所安全演讲
- 深度学习架构创新-深度研究
- 供应链韧性提升与风险防范-深度研究
- 基层医疗卫生服务能力提升考核试卷
- 化工原理完整(天大版)课件
- 2025年江苏连云港市赣榆城市建设发展集团有限公司招聘笔试参考题库附带答案详解
评论
0/150
提交评论