zoukankan      html  css  js  c++  java
  • MFC常用类

    CString

    CStringT

    操作可变长度字符串的模板类CStringT有三个实例:CString、CStringA和CStringW,它们分别提供对TCHAR、char和wchar_t字符类型的字符串的操作。

    char类型定义的是Ansi字符,wchar_t类型定义的是Unicode字符,而TCHAR取决于MFC工程的属性对话框中的Configuration Properties->General->Character Set属性,如果此属性为Use Multi-Byte Character Set,则TCHAR类型定义的是Ansi字符,而如果为Use Unicode Character Set,则TCHAR类型定义的是Unicode字符。

    构造函数

    CString(const CString& stringSrc);//将一个已经存在的CString对象stringSrc的内容拷贝到该CString对象。

    CString(LPCTSTR lpch, int nLength);//将字符串lpch中的前nLength个字符拷贝到该CString对象。

    CString(TCHAR ch, int nLength = 1);//使用此函数构造的CString对象中将含有nLength个重复的ch字符。

    转换函数

    CString& MakeLower(); //将字符串中的所有大写字符转换为小写字符。

    CString& MakeUpper(); //将字符串中的所有小写字符转换为大写字符。

    CString& MakeReverse(); //将字符串中所有字符的顺序颠倒。

    对象连接

    +、+=

    对象比较

    ==、!=、<、>、<=、>=等重载运算符

    int Compare(PCXSTR psz) const; //将该CString对象与psz字符串比较,如果相等则返回0,如果小于psz则返回值小于0,如果大于psz则返回值大于0。

    int CompareNoCase(PCXSTR psz) const throw(); //此函数与Compare功能类似,只是不区分大小写。

    字符串提取

    CString Left(int nCount) const; //提取该字符串左边nCount个字符的子字符串,并返回一个包含这个子字符串的拷贝的CString对象。

    CString Right(int nCount) const; //提取该字符串右边nCount个字符的子字符串,并返回一个包含这个子字符串的拷贝的CString对象。

    CString Mid(int iFirst,int nCount) const; //提取该字符串中以索引iFirst位置开始的nCount个字符组成的子字符串,并返回一个包含这个子字符串的拷贝的CString对象。

    CString Mid(int iFirst) const; //提取该字符串中以索引iFirst位置开始直至字符串结尾的子字符串,并返回一个包含这个子字符串的拷贝的CString对象。

    字符串查找

    int Find(PCXSTR pszSub,int iStart=0) const throw( );

    int Find(XCHAR ch,int iStart=0) const throw( );

    //在CString对象字符串的iStart索引位置开始,查找子字符串pszSub或字符ch第一次出现的位置,如果没有找到则返回-1。

    int FindOneOf(PCXSTR pszCharSet) const throw( );//查找pszCharSet字符串中的任意字符,返回第一次出现的位置,找不到则返回-1。

    int ReverseFind(XCHAR ch) const throw();//从字符串末尾开始查找指定的字符ch,返回其位置,找不到则返回-1。这里要注意,尽管是从后向前查找,但是位置的索引还是要从开始算起。

    字符串替换与删除

    int Replace(PCXSTR pszOld,PCXSTR pszNew); //用字符串pszNew替换CString对象中的子字符串pszOld,返回替换的字符个数。

    int Replace(XCHAR chOld,XCHAR chNew);//用字符chNew替换CString对象中的字符chOld,返回替换的字符个数。

    int Delete(int iIndex,int nCount = 1);//从字符串中删除iIndex位置开始的nCount个字符,返回删除操作后的字符串的长度。

    int Remove(XCHAR chRemove);//删除字符串中的所有由chRemove指定的字符,返回删除的字符个数。

    格式化字符串

    void __cdecl Format(PCXSTR pszFormat,[, argument]...);

    /参数pszFormat为格式控制字符串;参数argument可选,为要格式化的数据,一般每个argument在pszFormat中都有对应的表示其类型的子字符串,int型的argument对应的应该是"%d",float型的应对应"%f",等等。

    CTime类

    CTime类的对象表示的时间是基于格林威治标准时间(GMT)的。对象的大小是8个字节。表示的日期上限是3000年12月31日,下限是1970年1月1日 12:00:00 AM GMT。

    成员函数

    CTime();//构造一个未经初始化的CTime对象。此构造函数使我们可以定义一个CTime对象的数组,在使用数组前需要以有效的时间值为其初始化。

    CTime(__time64_t time);//以一个__time64_t(注意:最前面的下划线有两条)类型的数据来构造一个CTime对象。参数time是一个__time64_t类型的值,表示自GMT时间1970年1月1日零点以来的秒数,这里要注意的是,参数time代表的时间会转换为本地时间保存到构造的CTime对象中。例如,我们传递参数0构造一个CTime对象,然后调用CTime对象的GetHour成员函数将返回8,因为参数0代表的GMT时间转换为北京时间后为1970年1月1日 8:00:00。

    CTime(
               int nYear,
               int nMonth,
               int nDay,
               int nHour,
               int nMin,
               int nSec,
               int nDST = –1
             );//
    以本地时间的年、月、日、小时、分钟、秒等几个时间分量构造CTime对象。参数nYear、nMonth、nDay、nHour、nMin、nSec分别表示年、月、日、小时、分钟、秒。参数nDST指定是否实行夏令时,为0时表示实行标准时间,为正数时表示实行夏令时,为负数时由系统自动计算实行的是标准时间还是夏令时。

    CTime(const SYSTEMTIME& st,int nDST = - 1) ;//以一个SYSTEMTIME结构体变量来构造CTime对象。SYSTEMTIME结构体也是我们对日期时间的常用表示方式。参数st为以本地时间表示的SYSTEMTIME对象,参数nDST同上。

    static CTime WINAPI GetCurrentTime( );//获取系统当前日期和时间。返回表示当前日期和时间的CTime对象。

    int GetYear( ) const;//获取CTime对象表示时间的年份。范围从1970年1月1日到2038年(包括2038年)1月18日。

    int GetMonth( ) const;//获取CTime对象表示时间的月份。范围为1到12。

    int GetDay( ) const;//获取CTime对象表示时间的日期。范围为1到31。

    int GetHour( ) const;//获取CTime对象表示时间的小时。范围为0到23。

    int GetMinute( ) const;//获取CTime对象表示时间的分钟。范围为0到59。    

    int GetSecond( ) const;//获取CTime对象表示时间的秒。范围为0到59。

    int GetDayOfWeek( ) const;//此函数的返回值表示CTime对象代表的是星期几,1表示是周日,2表示是周一,以此类推。

    CString Format(LPCTSTR pszFormat) const;//将CTime对象中的时间信息格式化为字符串。参数pszFormat是格式化字符串,与printf中的格式化字符串类似,格式化字符串中带有%前缀的格式码将会被相应的CTime时间分量代替,而其他字符会原封不动的拷贝到返回字符串中。格式码及含义如下:

    %a:周的英文缩写形式。
    %A:周的英文全名形式。
    %b: 月的英文缩写形式。
    %B:月的英文全名形式。
    %c: 完整的日期和时间。
    %d:十进制形式的日期(01-31)。
    %H:24小时制的小时(00-23)。
    %I: 12小时制的小时(00-11)。
    %j: 十进制表示的一年中的第几天(001-366)。
    %m: 月的十进制表示(01-12)。
    %M:十进制表示的分钟(00-59)。
    %p: 12小时制的上下午标示(AM/PM)。
    %S: 十进制表示的秒(00-59)。
    %U: 一年中的第几个星期(00-51),星期日是一周的第一天。
    %W: 一年中的第几个星期(00-51),星期一是一周的第一天。
    %w: 十进制表示的星期几(0-6)。
    %Y: 十进制表示的年。

    CTime operator +(CTimeSpan timeSpan) const;//将CTime对象和CTimeSpan对象相加,返回一个CTime对象。实际意义就是在一个时间的基础上推后一个时间间隔,得到一个新的时间。

    CTime operator -(CTimeSpan timeSpan) const;//将CTime对象和一个CTimeSpan相减,返回一个CTime对象。实际意义就是在一个时间的基础上提前一个时间间隔,得到一个新的时间。

    CTimeSpan operator -(CTime time) const;//将该CTime对象和另一个CTime对象相减,返回一个CTimeSpan对象。实际意义就是计算两个时间点的间隔,得到一个CTimeSpan对象。

    CTime& operator +=(CTimeSpan span);//为该CTime对象增加一个span表示的时间间隔。

    CTime& operator -=(CTimeSpan span);//为该CTime对象减去一个span表示的时间间隔。

    CTime& operator =(__time64_t time);//为该CTime对象赋予一个新的时间值。

    简单说下剩下的几个重载i运算符:

    operator == :    比较两个绝对时间是否相等。

    operator != :    比较两个绝对时间是否不相等。

    operator > :    比较两个绝对时间,是否前一个大于后一个。

    operator < :    比较两个绝对时间,是否前一个小于后一个。

    operator >=    : 比较两个绝对时间,是否前一个大于等于后一个。

    operator <=    : 比较两个绝对时间,是否前一个小于等于后一个。

    CTimeSpan类

    CTimeSpan类的对象表示的是时间间隔。

    成员函数

    CTimeSpan( );//构造一个未经初始化的CTimeSpan对象。

    CTimeSpan(__time64_t time);//以一个__time64_t类型的数据来构造CTimeSpan对象,参数time的含义上面CTime(__time64_t time)的讲解。

    CTimeSpan(
                     LONG lDays,
                     int nHours,
                     int nMins,
                     int nSecs
             );//
    以天、小时、分钟、秒等时间分量来构造CTimeSpan对象。每个时间分量的取值范围如下:

    GetDays():获得CTimeSpan类对象中包含的完整的天数。

    GetHours():获得当天的小时数,取值范围为-23到23。

    GetTotalHours():获得CTimeSpan类对象中包含的完整的小时数。

    GetMinutes():获得当前小时包含的分数,取值范围为-59到59。

    GetTotalMinutes():获得CTimeSpan类对象中包含的完整的分数。

    GetSeconds():获得当前分钟包含的秒数,取值范围为-59到59。

    GetTotalSeconds():获得CTimeSpan类对象中包含的完整的秒数。

    CString Format(LPCTSTR pszFormat) const;//将一个CTimeSpan对象格式化为字符串。使用方式与CTime::Format类似,格式码及含义如下:

    %D:CTimeSpan对象中的总天数;
           %H:不足整天的小时数;
           %M:不足1小时的分钟数;
           %S:不足1分钟的秒数;
           %%:百分号。

           另外,CTimeSpan类也重载了运算符“=”,“+”,“-”,“+=”,“-=”,“==”,“!=”,“<”,“>”,“<=”,“>=”,用于CTimeSpan对象的赋值、加减运算及两个CTimeSpan对象的比较。

    CFile类

    成员函数

    CFile( );
           CFile(HANDLE hFile);
           CFile(LPCTSTR lpszFileName,UINT nOpenFlags);

    以上三个成员函数都是CFile的构造函数,用于构造CFile对象。参数hFile为要关联到CFile对象的文件的句柄。参数lpszFileName为要关联到CFile对象的文件的相对路径或者绝对路径;参数nOpenFlags为文件访问选项的组合,通过各选项的按位或运算实现组合,下面的5个表列出了nOpenFlags参数可能取的选项:

    下面的文件访问模式选项表中只能选择一个进行组合,默认取CFile::modeRead。

    R7}~}04XPF{XIW0IIMA%BK8

    下面的文件共享模式选项表中也只能选择一个进行组合,默认的共享模式是CFile::shareExclusive。

    (OCI]`M@56JLL)4OABTZ2PT

    下面的文件创建模式选项列表中可选择第一个或两者都选进行组合。

    (EF(EENO0XX0~RA{7_W1FEK

    注意,选择CFile::modeNoTruncate时需要与CFile::modeCreate一起使用,即CFile::modeCreate | CFile::modeNoTruncate。

    另外,还有一个文件缓冲选项列表和一个文件安全选项。文件缓冲选项不太常用,鸡啄米这里就不讲了,有兴趣的可以查阅MSDN。文件安全选项是CFile::modeNoInherit,意为禁止子进程继承使用此文件。

    virtual BOOL Open(LPCTSTR lpszFileName,UINT nOpenFlags,CFileException* pError = NULL);

    打开文件。它通常与默认构造函数CFile::CFile()一起使用。参数lpszFileName和nOpenFlags同构造函数。参数pError为指向文件异常对象的指针,默认为NULL。

    virtual void Close( );

    关闭文件。如果你没有在执行析构函数前调用此成员函数关闭文件,则析构函数会为你关闭。

    virtual UINT Read(void* lpBuf,UINT nCount);

    读取文件数据到缓存。参数lpBuf是由用户提供的指向接收文件数据的缓存的指针;参数nCount为读取的最大字节数。返回值是实际读取到缓存的字节数,如果到达文件尾则返回值可能会小于nCount,此时继续读取的话,会返回0,所以通常我们都会判断返回值是否小于nCount或者等于0来确定是否到达文件尾。

    virtual void Write(const void* lpBuf,UINT nCount);

    将缓存中的数据写入文件。参数lpBuf也是由用户提供,指向包含写入数据的缓存的指针;参数nCount为缓存中要被写入文件的数据的字节数。

    virtual ULONGLONG Seek(LONGLONG lOff,UINT nFrom);

    在一个打开的文件中重定位文件指针。参数lOff为文件指针移动的字节个数,为正数时表示向文件尾移动,为负数时表示向文件开头移动;参数nFrom为lOff的基准位置,即由nFrom位置开始移动lOff个字节,它可以取下面几个值中的一个:

    CFile::begin       从文件开头开始移动

    CFile::current    从文件指针的当前位置开始移动

    CFile::end          从文件尾开始移动

    文件打开时,文件指针被置于0,即文件开头处。如果此函数成功则返回文件指针的位置。

    void SeekToBegin( );

    将文件指针移动到文件开头。它等价于Seek( 0L, CFile::begin )。

    ULONGLONG SeekToEnd( );

    将文件指针移动到文件末尾。返回值是文件的字节长度。它等价于CFile::Seek( 0L, CFile::end )。

    virtual ULONGLONG GetLength( ) const;

    获取文件的字节长度。

    virtual void SetLength(ULONGLONG dwNewLen);

    改变文件的长度。参数dwNewLen为文件的新长度,它可能比文件的当前长度值要大或者小,文件会相应的被扩展或截取。

    virtual CString GetFileName( ) const;

    获取文件名称。

    virtual CString GetFilePath( ) const;

    获取文件的绝对路径。

    virtual CString GetFileTitle( ) const;

    获取文件的显示名称。举个例子,与GetFileName区分一下,如果你系统中的文件不显示扩展名,则它获取到的文件名称就不包含扩展名,否则就显示扩展名。

    virtual ULONGLONG GetPosition( ) const;

    获取文件指针的当前位置。

    static void PASCAL Remove(LPCTSTR lpszFileName,CAtlTransactionManager* pTM = NULL);

    删除文件。参数lpszFileName为要删除的文件路径,可以是相对路径、绝对路径或者网络路径;参数pTM指向一个CAtlTransactionManager对象。

    static void PASCAL Rename(LPCTSTR lpszOldName,LPCTSTR lpszNewName,CAtlTransactionManager* pTM = NULL);

    重命名文件。参数lpszOldName为老的文件路径;参数lpszNewName为新的文件路径;参数pTM指向一个CAtlTransactionManager对象。实际上此函数的意义已经不只是重命名文件,还可以移动文件到其他目录下,例如,lpszOldName取"d:\1.txt",lpszNewName取"e:\2.txt",这样可以将D盘中的1.txt文件转移到E盘并重命名为2.txt

    CException类--异常处理

    注意:MFC异常宏只能捕获处理CException及其子类类型的异常

    MFC异常宏

    MFC提供的异常处理宏包括TRY、CATCH、AND_CATCH、END_CATCH、THROW、THROW_LAST等,实际上就是在try、catch和throw的基础上定义的。

    1. /////////////////////////////////////////////////////////////////////////////
    2. // Exception macros using try, catch and throw
    3. //  (for backward compatibility to previous versions of MFC)
    4. #define TRY { AFX_EXCEPTION_LINK _afxExceptionLink; try {
    5. #define CATCH(class, e) } catch (class* e)
    6.     { ASSERT(e->IsKindOf(RUNTIME_CLASS(class)));   
    7.         _afxExceptionLink.m_pException = e;  
    8. #define AND_CATCH(class, e) } catch (class* e)
    9.     { ASSERT(e->IsKindOf(RUNTIME_CLASS(class)));   
    10.         _afxExceptionLink.m_pException = e;  
    11. #define END_CATCH } }
    12. #define THROW(e) throw e
    13. #define THROW_LAST() (AfxThrowLastCleanup(), throw)
    14. // Advanced macros for smaller code
    15. #define CATCH_ALL(e) } catch (CException* e)
    16.     { { ASSERT(e->IsKindOf(RUNTIME_CLASS(CException)));   
    17.         _afxExceptionLink.m_pException = e;  
    18. #define AND_CATCH_ALL(e) } catch (CException* e)
    19.     { { ASSERT(e->IsKindOf(RUNTIME_CLASS(CException)));   
    20.         _afxExceptionLink.m_pException = e;  
    21. #define END_CATCH_ALL } } }
    22. #define END_TRY } catch (CException* e)
    23.     { ASSERT(e->IsKindOf(RUNTIME_CLASS(CException)));   
    24.         _afxExceptionLink.m_pException = e; } } 

    异常类--CException类及其子类

    }1F{WF9S[G[@[QVY66CIBYU

    MFC异常处理

    MFC异常处理的TRY块的形式如下:

    TRY  
    {  
             复合语句  
    }  
    CATCH (MFC异常类名, 变量名)  
    {  
             复合语句  
    }  
    AND_CATCH (MFC异常类名, 变量名)  
    {  
             复合语句  
    }  
    AND_CATCH (MFC异常类名, 变量名)  
    {  
             复合语句  
    }  
    ......  
    END_CATCH

    说明:TRY后的一对大括号内包含了可能会抛出异常的代码块;用CATCH子句捕获并处理异常,它捕获的是指向异常对象的指针,小括号中的“MFC异常类名”就是CException类或其子类的名称,变量名代表的就是“MFC异常类名”类型的指针变量;如果抛出的异常类型与CATCH子句中的不一致,则对后面的所有AND_CATCH子句依次检查,若子句的异常类型与抛出异常类型一致则由其捕获并处理此异常;最后用END_CATCH结束整个TRY块。

  • 相关阅读:
    很火的华为太空表网站源码
    exists用法 exists用法讲解
    mysql 建立索引在on 从句中_MySQL优化
    mysql on 条件会走索引吗
    【算法理论】动归入门[C语言描述]
    机器学习基础考试复习
    【基础知识】深度学习500问之生成对抗网络
    【王道数据结构】《王道数据结构》课后代码题汇总
    【C语言实现】数据结构算法题及答案
    【题目归档】考研数据结构算法题目归档
  • 原文地址:https://www.cnblogs.com/lucas-hsueh/p/3734183.html
Copyright © 2011-2022 走看看