Windows程序设计-第9章--MFC通用类.ppt_第1页
Windows程序设计-第9章--MFC通用类.ppt_第2页
Windows程序设计-第9章--MFC通用类.ppt_第3页
Windows程序设计-第9章--MFC通用类.ppt_第4页
Windows程序设计-第9章--MFC通用类.ppt_第5页
免费预览已结束,剩余41页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第9章 MFC通用类,MFC类库除了提供封装Windows界面元素对象的类,如CWnd、CMenu、CDialog等,还提供了一些通用的类。本章主要叙述字符串类、日期时间类和集合类的使用及主要成员函数,最后结合实例,说明使用该类的方法和技巧。,9.1 字符串类Cstring 1创建CString类对象 CString类构造函数的版本很多,它们的函数原型如下: CString( ); /构造空字符串 CString( const CString /用重复的字符构造新的字符串,字符由参数ch表明,重复次数由nRepeat决定,CString( LPCTSTR lpch, int nLength )

2、; /拷贝字符数组的内容构造字符串,lpch为指向数组的指针,nLength为数组长度 CString( const unsigned char* psz ); /拷贝以0结尾的字符串内容,构造新的字符串,psz为指向字符串的指针 CString( LPCWSTR lpsz ); CString( LPCSTR lpsz ); /拷贝lpsz指定字符串内容构造Unicode字符串,2有关数组属性的成员函数和操作符 (1)int GetLength( ) const; 函数返回字符串对象中的字符数,不包括最后的0。 (2)BOOL IsEmpty( ) const; 函数判断字符串对象是否为空,

3、即包含的字符数为0。如果为空,返回值为TRUE,否则,返回值为FALSE。 (3)void Empty( ); 函数强制清空字符串对象,使其包含的字符数为0。清空字符串对象后,调用GetLength函数的返回值为0。,(4)TCHAR GetAt( int nIndex ) const; 函数返回字符串对象中由nIndex索引值指定单个字符,索引以0为基础,第一个字符对应的索引值为0。nIndex的值必须大于或等于0,小于字符串中字符的总数,在MFC调试版本中,程序将检测nIndex是否为合法值,而在Release版本中,将不进行检测。 (5)operator LPCTSTR ( ) cons

4、t; 操作符返回一个指向包含在CString类对象中的以0结尾的字符串的const char *指针,返回的指针是只读的,不能对其进行修改。,3CString类的表达式 CString类重载了“=”、“+”、“+=”三个运算符,以实现字符串之间的赋值和串联运算。 4比较类函数及操作符 (1)比较操作符 CString类重载了“=”、“!=”、“”、“=”、“=”操作符,以实现对字符串的比较操作,可以进行字符串对象之间、字符串对象和LPCTSTR字符串、字符串对象和字符指针之间的比较,比较操作是大小写敏感的。 (2)int Compare( LPCTSTR lpsz ) const; 将字符串类

5、对象与lpsz比较,如果相等,返回值为0;如果比lpsz大,返回值大于0;如果比lpsz小,返回值小于0。,5字符串截取类函数 (1)CString Left( int nCount ) const; Left函数提取字符串对象最开始(左侧)的若干字符,将所提取子串的拷贝作为返回值。截取字符的数量由参数nCount决定,当nCount大于字符串长度时,整个字符串被提取。操作后,原始字符串未发生变化。 (2)CString Right( int nCount ) const; 与Left函数调用类似,Right函数调用提取字符串右侧(末尾)的若干字符。 (3)CString Mid( int n

6、First ) const; CString Mid( int nFirst, int nCount ) const; Mid函数调用从字符串对象中间开始提取子串,开始位置由nFirst参数指定,提取字符数由参数nCount指定,当省略参数nCount,表示从nFirst开始,提取余下的所有字符。 CString s1( abcdef ); CString s2= s.Mid( 2,3 ); / s2= cde,6转换函数 (1)void MakeUpper( ); 将字符串中的所有小写字母转换为大写。 (2)void MakeLower( ); 将字符串中的所有大写字母转换为小写。 (3)v

7、oid MakeReverse( ); 反转字符串对象中所有字符的排列顺序。 (4)int Replace( TCHAR chOld, TCHAR chNew ); int Replace( LPCTSTR lpszOld, LPCTSTR lpszNew ); (5)int Insert( int nIndex, TCHAR ch ) int Insert( int nIndex, LPCTSTR pstr ) 函数从指定的位置,插入一个字符或字符串,插入位置由nIndex参数指定,插入内容由ch或pstr指定,返回值为插入后新字符串的长度。,(6)int CString:Remove( T

8、CHAR ch ); 函数清除字符串对象中由ch指定的所有字符,返回值为删除的总字符数,如果没有匹配的字符,返回值为0。字符匹配是大小写敏感的。 (7)int Delete( int nIndex, int nCount = 1 ) 函数删除字符串中连续的若干字符,删除的起始位置由nIndex参数决定,删除的字符数由参数nCount决定,如果nCount大于从nIndex开始余下的字符数,则余下的所有字符被删除。返回值为删除部分字符后字符串的长度。,(8)void TrimRight( ); void TrimRight( TCHAR chTarget ); void TrimRight( L

9、PCTSTR lpszTargets ); 没有参数的函数版本清除字符串结尾处的连续空白字符,包括换行符、空格、制表符直至遇到非空白字符为止。调用带参数的版本清除字符串结尾处所有指定的字符或字符串。 (9)格式化字符串 void Format( LPCTSTR lpszFormat, . ); 函数用来格式化字符串,参数lpszFormat为格式化控制字符串,省略号表示lpszFormat中指定的参数列表,具体格式控制与printf函数类似,请参考有关手册。,7查找类成员函数 CString类中成员函数Find用来查找字符串中第一个匹配的字符或字符子串。函数返回第一个匹配字符或子串的起始位置,

10、如果没有匹配子串或字符,返回-1,它的原型有4种。 int Find( TCHAR ch ) const; 参数ch指定要匹配的字符。 int Find( LPCTSTR lpszSub ) const; 参数lpszSub指定要匹配的字符串。 int Find( TCHAR ch, int nStart ) const; int Find( LPCTSTR pstr, int nStart ) const;,8有关缓冲区的操作 使用缓冲区来操作字符串内容应遵循下面的步骤: (1)调用GetBuffer函数,得到指向字符串缓冲区的指针; (2)直接修改指向缓冲区指针所指的内容,以达到间接修改字

11、符串对象的目的; (3)调用ReleaseBuffer函数,以结束缓冲区的使用。 9BOOL LoadString( UINT nID );,9.2 日期和时间类 MFC提供了CTime和CTimeSpan类,以方便在应用程序中处理跟时间有关的数据。这两个类实现了ANSI时间函数(通常包含在time.h头文件中)的大部分功能,并简化了操作。我们也可以直接使用这些ANSI时间函数来处理时间数据。,9.2.1 CTime类及其主要成员函数 1CTime类的常用构造函数 CTime( ); 构造未初始化的时间对象,使用前,一定要初始化。 CTime( const CTime 通过指定年、月、日、小时

12、、分、秒各分量来构造时间类对象。,2提取时间信息的有关函数 (1)time_t GetTime( ) const; 从CTime类对象中提取time_t类型时间值。 (2)提取时间值:年、月、日、小时、分、秒、星期 int GetYear( ) const; 返回值范围19702038; int GetMonth( ) const; 返回值范围112; int GetDay( ) const; 返回值范围131; int GetHour( ) const; 返回值范围023; int GetMinute( ) const; 返回值范围059; int GetSecond( ) const; 返

13、回值范围059; int GetDayOfWeek( ) const; 返回值范围17,1表示星期一,二为星期二,依此类推。,3重载的运算符 (1)赋值运算符(=),用于将CTime对象或time_t变量赋给另一个CTime对象; (2)可以使用=、!=、=等操作符来比较两个CTime对象。往后的时间值比前面的时间值大; (3)可以使用+、-、+=、-=运算符向CTime类对象加入或减去一个CTimeSpan对象; (4)可以从一个CTime对象中减去另一个CTime对象,以得到CTimeSpan对象;,4格式化时间 通过Format成员函数可以从CTime对象中创建一个格式化的CString

14、对象,原型如下: CString Format( LPCTSTR pFormat ) const;,9.2.2 CTimeSpan类及其主要成员函数 1常用的构造函数 CTimeSpan( ); 构造未初始化的CTimeSpan对象 CTimeSpan( const CTimeSpan,2提取时间信息 (1)GetDays、GetHours、GetMinutes、GetSeconds用于提取CTimeSpan对象中的天数、小时数、分钟数以及秒数,其原型如下: LONG GetDays( ) const; GetDays用于返回总的天数。 int GetHours( ) const; Get H

15、ours用于返回当天的小时数,取值范围为-2323。 int Get Minutes( ) const; Get Minutes用于返回当前小时内的分钟数,取值范围为-5959。,(2)使用GetTotalHours、GetTotalMinutes、GetTotalSeconds提取CTimeSpan对象中的时间,并折合成总的小时数、分钟数以及秒数,其原型如下: LONG GetTotalHours( ) const; LONG GetTotalMinutes( ) const; LONG GetTotalSeconds( ) const;,3重载运算符 CTimeSpan重载了=、!=、=运

16、算符,以实现CTimeSpan对象之间的比较; CTimeSpan重载了赋值(=)运算符,以进行CTimeSpan对象之间相互赋值; CTimeSpan重载了+、-、+=、-=运算符,以实现两个CTimeSpan对象之间的运算。,4格式化时间 CString Format( LPCSTR pFormat ) const; 函数调用将CTimeSpan类对象中的时间信息按指定的格式输出到字符串中,输出格式由参数pFormat指定,格式代码由作为前导符号,具体输出时,由相应的时间分量替代,其它字符,原样输出到字符串中。,9.2.3 COleDateTime与COleDateTimeSpan类介绍

17、COleDateTime与COleDateTimeSpan类的使用与CTime和CTimeSpan类的使用类似,成员函数及调用方法也非常类似,可以相互参考。COleDateTime与COleDateTimeSpan为OLE对象,使用时要包含相应的头文件“afxdisp.h”,它们所表示的时间范围比CTime及CTimeSpan类要大,在实际使用过程中,可以灵活掌握。这里,不再重复列出它们的成员函数及操作符,具体使用细节请参考MSDN的有关内容。,9.3 集合类的使用 MFC提供了两种集合类,一种是基于模板的集合类,一种是非模板集合类,两种类都可以实现列表、数组和映象。对于非模板集合类,MFC提

18、供了许多预定义的类,分别用来实现列表、数组和映象。 MFC提供了CPtrList类处理void型指针列表,CStringList类存储CString类型列表,CObList类存储指向CObject派生对象的指针列表。 MFC提供的存储简单值类型的数组类有:CByteArray、CWordArray、CUintArray,提供了CPtrArray存储空指针数组,CStringArray保存CString类型数组,CObArray保存CObject指针数组。 MFC提供的预定义映象类有:CMapStringToString、CMapPtrToPtr、CMapStringToOb、CMapStrin

19、gToPtr、CMapPtrToWord、CMapWordToOb、CMapWordToPtr。,9.3.1 数组类Carray CArray的定义如下: template class CArray : public CObject 参数TYPE指明数组中存储的数据类型,ARG_TYPE指明引用数组元素时使用的数据类型,通常为TYPE类型的引用。 CArray类类似于C中的数组,但能动态地调整内存分配,数组元素的索引从0开始。下面的语句定义了一个CArray类对象: CArray m_ptArray; 其中存储数据的类型(即TYPE)为CPoint类型,引用数组元素的数据类型(即ARG_TYP

20、E)也为CPoint类型。,1有关属性的函数 (1)int GetSize( ) const; 用于返回数组中元素的个数。 (2)void SetSize( int nNewSize, int nGrowBy = -1 ); 设置空的或现存数组的大小,具体大小由参数nNewSize决定,nNewSize必须大于等于0,在必要时,会重新分配内存。 (3)int GetUpperBound( ) const; 用于返回当前数组对象可访问元素的索引上限,返回值比GetSize的返回值要小1,当返回值为-1,表示数组中没有元素。,2访问数组元素 (1)TYPE GetAt( int nIndex )

21、const; 返回指定索引位置的数组元素值,具体位置由nIndex指定,它是以0为基础的,最大取值不得超过GetUpperBound的返回值。TYPE是数组元素的数据类型。以下函数的叙述中,TYPE含义相同。 (2)void SetAt( int nIndex, ARG_TYPE newElement ); 函数设置指定元素的值,索引位置由参数nIndex指定,新的元素值由newElement参数指定。ARG_TYPE为引用数组元素时的数据类型。以下函数中,ARG_TYPE含义相同。,(3)TYPE 返回指向数组元素的指针,通过指针可以快速访问数组中的元素。对所返回指针的操作将直接影响数组元素

22、的值。,3增加、删除元素的有关操作 (1)int Add( ARG_TYPE newElement ); 向数组尾部增加一个新的数组元素,元素值为newElement,数组的大小将加1,返回值为插入的当前元素在数组中的索引位置。 (2)int Append( const CArray 将源数组src中的所有元素拷贝到当前数组中,并覆盖原有的数组元素,函数不会释放原有的内存,如果有必要,会分配额外的内存,以容纳新增的数组元素。,(4)void InsertAt( int nIndex, ARG_TYPE newElement, int nCount = 1 ); void InsertAt( i

23、nt nStartIndex, CArray* pNewArray ); 第一个函数将在数组的指定位置插入一个数组元素或该元素值的多个拷贝,元素值由参数newElement指定,拷贝的份数由参数nCount指定。 第二个函数在数组的指定位置插入另一个数组中的元素,两个数组的类型必须一致。,(5)void RemoveAt( int nIndex, int nCount = 1 ); 删除数组中从指定位置开始的一个或多个元素,nIndex表明了起始位置,该值必须介于0至GetUpperBound函数返回值之间,删除后,余下的元素下移。此外,调用函数欲删除超过指定位置后余下的元素个数,将产生运行错

24、误。 (6)void RemoveAll( ); 删除数组中的所有元素。,9.3.2 列表类Clist 列表类的定义如下: template class CList : public CObject 参数TYPE指明列表中存储的数据类型,参数ARG_TYPE指明引用列表元素时使用的数据类型。可以使用类型为POSITION的变量作为访问列表元素的关键字,可以通过该变量遍历列表项。,1有关属性和状态的函数 (1)int GetCount() const; 返回列表中元素的个数。 (2)BOOL IsEmpty( ) const; 判断列表是否为空,即不包含任何元素。如果为空,返回TRUE,否则,返

25、回FALSE。,2获得表头和表尾函数 (1)获得表头 TYPE GetHead( ) const; TYPE GetTail函数与GetHead函数类似,用来返回表尾元素的引用或拷贝。,3遍历列表元素 (1)获得列表表头元素的位置 POSITION GetHeadPosition( ) const; (2)获得指定位置处的列表元素并向前遍历 TYPE,4访问和操作列表元素 (1)TYPE 函数设置指定位置处(由参数pos表明)的列表元素的值,所要设置的值由newElement参数指定。,5增加删除元素操作 (1)POSITION AddHead( ARG_TYPE newElement );

26、void AddHead( CList* pNewList ); (2)POSITION AddTail( ARG_TYPE newElement ); void AddTail( CList* pNewList ); (3)TYPE RemoveHead( ); (4)TYPE RemoveTail( );,(5)void RemoveAt( POSITION position ); (6)void RemoveAll( ); (7)POSITION InsertBefore( POSITION position, ARG_TYPE newElement ); (8)POSITION InsertAfter( POSITION position, ARG_TYPE newElement );,6查询操作 (1)POSITION Find( ARG_TYPE se

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论