上一节讲了分割窗口的有关知识,本节开始讲解MFC的一些常用类,先来说说CString类。在内容开始前为大家介绍一款MFC界面开发控件:

  • Xtreme Toolkit Pro | 免费下载:是屡获殊荣的VC界面库,是MFC开发中最全面界面控件套包,它提供了Windows开发所需要的11种主流的Visual C++ MFC控件,包括Command Bars、Controls、Chart Pro、Calendar、Docking Pane、Property Grid、Report Control、Shortcut Bar、Syntax Edit、Skin Framework 和Task Panel。
  • BCGControlBar | 免费下载:库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中,并为您节省数百个开发和调试时间。

点击查看全套MFC开发教程,助你轻松入门,还有各种实战案例!统统限时免费开发!

CString类简介

CString类作为MFC的常用类,当之无愧。可以这样说,只要是从事MFC开发,基本都会遇到使用CString类的场合。因为字符串的使用比较普遍,而CString类又提供了对字符串的便捷操作,所以它给MFC开发人员带来了高的开发效率,受到了开发者的欢迎。

大家使用VS2010的话,可能会见到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类为讲解对象。

CString类的字符串操作

1. CString类的构造函数

CString类有很多构造函数,这里只介绍几个比较常用的:

CString(const CString& stringSrc);

将一个已经存在的CString对象stringSrc的内容拷贝到该CString对象。例如:

C++代码

  1. CString str1(_T("www.jizhuomi.com"));  // 将常量字符串拷贝到str1
  2. CString str2(str1);       // 将str1的内容拷贝到str2

CString(LPCTSTR lpch, int nLength);

将字符串lpch中的前nLength个字符拷贝到该CString对象。例如:

C++代码

  1. CString str(_T("www.jizhuomi.com"),3); // 构造的字符串对象内容为"www"

CString(TCHAR ch, int nLength = 1);

使用此函数构造的CString对象中将含有nLength个重复的ch字符。例如:

C++代码

  1. CString str(_T('w'),3);  // str为"www"

2. CString类的大小写转换及顺序转换函数

CString& MakeLower();

将字符串中的所有大写字符转换为小写字符。

CString& MakeUpper();

将字符串中的所有小写字符转换为大写字符。

CString& MakeReverse();

将字符串中所有字符的顺序颠倒。

例如:

C++代码

  1. CString str(_T("JiZhuoMi"));
  2. str.MakeLower();   // str为"jizhuomi"
  3. str.MakeUpper();   // str为"JIZHUOMI"
  4. str.MakeReverse(); // str为"IMOUHZIJ"

3. CString对象的连接

多个CString对象的连接可以通过重载运算符+、+=实现。例如:

C++代码

  1. CString str(_T("jizhuomi"));      // str内容为"jizhuomi"
  2. str = _T("www.") + str + _T("."); // str为"www.jizhuomi."
  3. str += _T("com");                 // str为"www.jizhuomi.com"

4. CString对象的比较

CString对象的比较可以通过==、!=、<、>、<=、>=等重载运算符实现,也可以使用Compare和CompareNoCase成员函数实现。

int Compare(PCXSTR psz) const;

将该CString对象与psz字符串比较,如果相等则返回0,如果小于psz则返回值小于0,如果大于psz则返回值大于0。

int CompareNoCase(PCXSTR psz) const throw();

此函数与Compare功能类似,只是不区分大小写。

例如:

C++代码

  1. CString str1 = _T("JiZhuoMi");
  2. CString str2 = _T("jizhuomi");
  3. if (str1 == str2)
  4. {
  5. // 因为str1、str2不相等,所以不执行下面的代码
  6. ...
  7. }
  8. if (0 == str1.CompareNoCase(str2))
  9. {
  10. // 因为不区分大小写比较时,CompareNoCase函数返回0,所以执行下面的代码
  11. ...
  12. }

5. CString对象字符串的提取操作

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对象。

例如:

C++代码

  1. CString str1 = _T("jizhuomi");
  2. CString str2 = str1.Left(3);    // str2为"jiz"
  3. str2 = str1.Right(2);           // str2为"mi"
  4. str2 = str1.Mid(1,3);           // str2为"izh"
  5. str2 = str1.Mid(5);             // str2为"omi"

6. 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。这里要注意,尽管是从后向前查找,但是位置的索引还是要从开始算起。

C++代码

  1. CString str = _T("jizhuomi");
  2. int nIndex1 = str.Find(_T("zh"));   // nIndex1的值为2
  3. int nIndex2 = str.FindOneOf(_T("mui")); // nIndex2的值为1
  4. int nIndex3 = str.ReverseFind(_T('i'));  // nIndex3的值为7

7. CString类对象字符串的替换与删除

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指定的字符,返回删除的字符个数。

例如:

C++代码

  1. CString str = _T("jizhuomi");
  2. int n1 = str.Replace(_T('i'), _T('j'));  // str为"jjzhuomj",n1为2
  3. int n2 = str.Delete(1,2);        // str为"jhuomj",n2为6
  4. int n3 = str.Remove(_T('j'));    // str为"huom",n3为2

8. CString类的格式化字符串方法

使用CString类的Format成员函数可以将int、short、long、float、double等数据类型格式化为字符串对象。

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

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

例如:

C++代码

  1. CString str;
  2. int a = 1;
  3. float b = 2.3f;
  4. str.Format(_T("a=%d,b=%f"), a, b);  // str为"a=1,b=2.300000"

好了,关于CString类的内容就讲到这里了,用法不少,但仍不全,大家可以查看MSDN深入学习。谢谢大家耐心读完本节教程。

转载自:鸡啄米

Visual Studio/MFC编程入门之MFC常用类:CString类相关推荐

  1. VS2019/MFC编程入门之对话框:向导对话框的创建及显示

    上一讲讲了属性页对话框和相关的两个类CPropertyPage类和CPropertySheet类,对使用属性页对话框做准备.本节将为大家演示如何创建向导对话框. 仍然以前面的"加法计算器&q ...

  2. 鸡啄米之VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox)

    目录 一.目的: 1.点击列表框某个变量后,编辑框就显示出来这个变量名字 一.参考: 1.VS2010/MFC编程入门之二十四(常用控件:列表框控件ListBox) ①总结:good:亲测有效,适合多 ...

  3. VS2019/MFC编程入门之常用控件:按钮控件的编程实例

    上一节VS2010/MFC编程入门教程中讲了按钮控件Button.Radio Button和Check Box的基本用法,本节就继续讲按钮控件的内容,通过一个实例让大家更清楚按钮控件在实际的软件开发中 ...

  4. VS2010/MFC编程入门之二十三(常用控件:按钮控件的编程实例)

    上一节VS2010/MFC编程入门教程中鸡啄米讲了按钮控件Button.Radio Button和Check Box的基本用法,本节就继续讲按钮控件的内容,通过一个实例让大家更清楚按钮控件在实际的软件 ...

  5. VS2019/MFC编程入门——文档、视图和框架:分割窗口

    上一节中讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口.在内容开始前为大家介绍一款MFC界面开发控件: Xtreme Toolkit Pro | 免费下载:是屡获殊荣的 ...

  6. VS2010/MFC编程入门之五十(图形图像:GDI对象之画笔CPen)

    上一节中鸡啄米讲了CDC类及其屏幕绘图函数,本节的主要内容是GDI对象之画笔CPen. GDI对象 在MFC中,CGdiObject类是GDI对象的基类,通过查阅MSDN我们可以看到,CGdiObje ...

  7. VS2019/MFC编程入门:树形控件Tree Control 下

    前面一节讲了树形控件Tree Control的简介.通知消息以及相关数据结构,本节继续讲下半部分,包括树形控件的创建.CTreeCtrl类的主要成员函数和应用实例.在内容开始前为大家介绍一款MFC界面 ...

  8. vs2010c语言窗口程序,VS2010/MFC编程入门之四十一(文档、视图和框架:分割窗口)...

    上一节中鸡啄米讲了文档.视图和框架结构中各对象之间的关系,本节主要讲讲在MFC中如何分割窗口. 分割窗口概述 分割窗口,顾名思义,就是将一个窗口分割成多个窗格,在每个窗格中都包含有视图,或者是同一类型 ...

  9. VS2013/MFC编程入门之三十四(工具栏:工具栏资源及CToolBar类)

    上一节中讲了菜单及CMenu类的使用,这一节讲与菜单有密切联系的工具栏. 工具栏简介 工具栏一般位于主框架窗口的上部,菜单栏的下方,由一些带图片的按钮组成.当用户用鼠标单击工具栏上某个按钮时,程序会执 ...

最新文章

  1. 央行:货币政策稳健并不意味着一成不变
  2. JDBC基础学习(三)—处理BLOB类型数据
  3. Hibernate的懒加载问题
  4. javascript中内置对象简介、Array
  5. Object-C非正式协议与正式协议的区别
  6. JavaScript--小白入门篇1
  7. C++_类和对象_C++运算符重载_左移运算符重载_链式编程_实现直接打印对象---C++语言工作笔记056
  8. MySQL学习之路 一 : MySQL 5.7.19 源码安装
  9. 21秋期末考试电子商务概论10250k2
  10. 计算机专业学不学ps,慎重!不建议你报的院校专业,是因为真的考不上!
  11. 浅谈微信公众号,微信开放平台和微信商户号的区别
  12. python 经典图书排行榜_计算机优秀书籍每周销售排行榜
  13. SqlServer 2008还原数据库步骤
  14. 全球十大咨询公司比较
  15. 深度学习的应用与实践
  16. 检查一个字符串是否为回文 回文:正着念与反着念一样,例如:上海自来水来自海上;要求用户从控制台输入一个email地址,然后获取该email的用户名(@之前的内容)
  17. 怎么提取伴奏?只要三招即可快速搞定,附带详细教程
  18. halcon学习拓展系列—弱边缘缺陷检测方法汇总之频域方法(一)
  19. form-generator扩展原生表格,element-table,子表单等组件
  20. 使用canvas在前端实现图片合成

热门文章

  1. 鲁大师Q1季度电脑硬件报告:intel 12代酷睿笔记本霸榜,显卡小幅降价
  2. 获客成本是什么 如何降低获客成本
  3. 安装程序配置服务器失败
  4. vsc 的c环境配置
  5. Java之每日经典一题:(1)珠穆朗玛峰
  6. 使用队列 模拟跳舞舞伴Java实现
  7. 【考研英语语法】前置与倒装句
  8. JHM3000体温传感器驱动
  9. 隔一段时间撸一次,特别香,HashMap中remove、getOrDefault源码,一遍一遍、又一遍
  10. leetcode 手机九宫格输入字母组合