C++几个常用类介绍第一篇



一、常用的C++MFC类

1、CString

网址:http://baike.baidu.com/link?url=PDpqZHn6cNhR4uoOpyxeTT7O6Vv1F15q4kgAomDiFwGP_lnXxUYkZsdSZ_FdThwKs0tLJkb-1ZcQVG_Qg9Wdeq

1)字符串连接能体现出 CString 类型方便性特点的一个方面就是字符串的连接,使用 CString 类型,你能很方便地连接两个字符串,正如下面的例子:

CString gray("Gray");

CString cat("Cat");

CString graycat = gray + cat;

//then graycat="GrayCat"

2)字符串输入输出以及将数字格式化

CString s;

s.Format(L("The total is %d"),total);        //注意此处的“”

用这种方法的好处是你不用担心用来存放格式化后数据的缓冲区是否足够大,这些工作由CString类替你完成。

格式化是一种把其它不是字符串类型的数据转化为CString类型的最常用技巧,比如,把一个整数转化成CString类型,可用如下方法:

CString s;

s.Format(L("%d"),total);

3)成员函数

>>构造函数

CString(const CString& stringSrc);

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

CString str1(L(jizhuomi)); // 将常量字符串拷贝到str1

CString str2(str1);          // 将str1的内容拷贝到str2

CString(LPCTSTR lpch,int nLength);

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

CString str(L("wwwjizhuomi"),3); // 构造的字符串对象内容为"www"

CString(TCHAR ch,int nLength = 1);

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

CString str(L(‘w‘),3); // str为"www"

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

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

CString str(_T("jizhuomi")); // str内容为"jizhuomi"

str = _T("www") + str + _T("-"); // str为"wwwjizhuomi-"

str += _T("com"); // str为wwwjizhuomi-com

>>CString对象的比较

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

int Compare(PCXSTR psz) const;

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

int CompareNoCase(PCXSTR psz) const throw();

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

例如:

CString str1 = _T("JiZhuoMi");

CString str2 = _T("jizhuomi");

if (str1 == str2)

{

// 因为str1、str2不相等,所以不执行下面的代码

...

}

if (0 == str1.CompareNoCase(str2))

{

// 因为不区分大小写比较时,CompareNoCase函数返回0,所以执行下面的代码

...

}

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

例如:

CString str1 = _T("jizhuomi");

CString str2 = str1.Left⑶; // str2为"jiz"

str2 = str1.Right⑵; // str2为"mi"

str2 = str1.Mid(1,3); // str2为"izh"

str2 = str1.Mid⑸; // str2为"omi"

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

CString str = _T("jizhuomi");

int nIndex1 = str.Find(_T("zh")); // nIndex1的值为2

int nIndex2 = str.FindOneOf(_T("mui")); // nIndex2的值为1

int nIndex3 = str.ReverseFind(_T(‘i‘)); // nIndex3的值为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指定的字符,返回删除的字符个数。

例如:

CString str = _T("jizhuomi");

int n1 = str.Replace(_T(‘i‘),_T(‘j‘)); // str为"jjzhuomj",n1为2

int n2 = str.Delete(1,2); // str为"jhuomj",n2为6

int n3 = str.Remove(_T(‘j‘)); // str为"ihuom",n3为1

>>CString类的格式化字符串方法

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

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

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

例如:

CString str;

int a = 1;

float b = 2.3f;

str.Format(_T("a=%d,b=%f"),a,b); // str为"a=1,b=2.300000

>>将char*类型的字符串转换为CString类型

char* 转化为 CString

你有一个 char* 类型的数据,或者说一个字符串。怎么样创建 CString 对象呢?这里有一些例子:

char * p = "This is a test";

或者像下面这样更具有 Unicode 意识:

TCHAR * p = _T("This is a test")

LPTSTR p = _T("This is a test");

你可以使用下面任意一种写法:

CString s = "This is a test"; // 8-bit only

CString s = _T("This is a test"); // Unicode-aware

CString s("This is a test"); // 8-bit only

CString s(_T("This is a test")); // Unicode-aware

CString s = p;

CString s(p);

用这些方法可以轻松将常量字符串或指针转换成 CString。需要注意的是,字符的赋值总是被拷贝到
CString 对象中去的,所以你可以像下面这样操作:

TCHAR * p = _T("Gray");

CString s(p);

p = _T("Cat");

s += p;

结果字符串肯定是"GrayCat"。

2、CPect

网址:http://baike.baidu.com/link?url=_UdTnW20X1jLgzUhOxrFyhiWUGh8xA17mZXpZXQJDSF38EAb2M5ZhpT_XO7eQyQSVLUNWuqB9mVZMQ3cDRxw__

>>CRect成员函数

Width 计算CRect的宽度

Height 计算CRect的高度

Size 计算CRect的大小

TopLeft 返回CRect的左上角点

BottomRight 返回CRect的右下角点

CenterPoint 返回CRect的中心点

IsRectEmpty 确定CRect是否是空的。如果CRect的宽度和/或高度为0,则它是空的

IsRectNull 确定CRect的top,bottom,left,和right是否都等于0

PtInRect 确定指定的点是否在CRect之内

SetRect 设置CRect的尺寸

SetRectEmpty 设置CRect为一个空的矩形(所有的坐标都等于0)

CopyRect 将一个源矩形的尺寸拷贝到CRect

EqualRect 确定CRect是否等于给定的矩形

InflateRect 增加CRect的宽度和高度

DeflateRect 减少CRect的宽度和高度

NormalizeRect 使CRect的高度和宽度返回规范

OffsetRect 将CRect移动到指定的偏移

SubtractRect 从一个矩形区域中减去一个矩形

IntersectRect 设置CRect等于两个矩形的交集

UnionRect 设置CRect等于两个矩形的并集

>>CRect运算符

operator LPCRECT 将一个CRect转换为一个LPCRECT

operator LPRECT 将一个CRect转换为一个LPRECT

operator = 将一个矩形的尺寸拷贝到CRect

operator == 确定CRect是否与一个矩形相等

operator != 确定CRect是否不等于另一个矩形

operator += 使CRect增加指定的偏移,或使CRect放大

operator -= 从CRect中减去指定的偏移,或缩小CRect

operator &= 设置CRect等于CRect和某个矩形的交

operator |= 设置CRect等于CRect和某个矩形的并

operator + 增加给定偏移量到CRect,并返回得到的CRect对象

operator - 从CRect中减去给定偏移量,并返回得到的CRect对象

operator & 创建CRect与某个矩形的交,并返回得到的CRect对象

operator | 创建CRect与某个矩形的并,并返回得到的CRect对象

默认坐标系:原点为左上角,右边为x轴正方向,下边为y轴正方向。

还有很多实例,在此不再详细介绍

3、CPen

网址:http://baike.baidu.com/link?url=SsNEoaWAy_e_4NilGRx95ArJJuRrNw6o8pITK9dz13xuVUxLeVje7Zy1KtogUMMtjV7XcAIlYXUMz_N7e5f6r_#3

实例:

CPen pen1;

CPen *oldPen;

pen1.CreatePen(PS_SOLID,2,RGB(192,192,192));//创建对象

oldPen = pDC->SelectObject(&pen1);//将画笔选入设备描述表,并保存旧的画笔

4、CImage

>>保存图片

保存图片只有一个函数,就是Save函数,该函数有两个参数,一个是文件的完整路径和文件名,一个是文件的扩展名。但是如果只有保存和显示图片功能,CImage的Save函数发挥不了太大的作用,不过是一个转存文件的工具。CImage的强大之处在于可以对图片进行修改,再进行保存。

修改图片的函数有这么3个函数可以修改图片,都是像素级的操作。这三个函数分别为SetPixel,SetPixelRGB,SetPixelIndexed。可以通过双重循环对屏幕进行逐点扫描,并把像素颜色值保存到CImage对象中达到截屏的目的。

我们可以用一段很简单的代码来实现将DC(设备上下文)里绘制的图形存入图片文件中。基本的思想是先初始化一个CImage对象,再为它设定大小和位数,也就是图片大小和图片的色彩总数,再用设备上下文绘图。绘制完图形后再建立另外一个设备上下文对象,称为目的DC,将之前绘图的DC称为源DC,目的DC必须与CImage对象关联起来,然后利用BitBlt函数和其他函数将绘图DC的内容拷贝到目的DC中,最后将CImage对象保存到文件中,以下是代码实现(VS2010支持中文变量名):

CRect rect;

this->GetClientRect(rect);

CImage image;

image.Create(rect.Width(),rect.Height(),24);

CDC* DCpoint=this->GetDC();

DCpoint->Ellipse(20,20,200,200);

CDC dstDC;

dstDC.CreateCompatibleDC(DCpoint);

dstDC.SelectObject(image);

dstDC.BitBlt(0,0,rect.Width(),rect.Height(),DCpoint,0,0,SRCCOPY);

image.Save(L"D:\\用户目录\\Pictures\\写图片文件.jpg");

>>显示图片

首先看下面这段代码

CImage image;

image.Load(L"D:\\用户目录\\Pictures\\example.jpg");

image.Draw(GetDC()->m_hDC,CRect(0,0,320,240));

CImage类支持以Load方法读取本地磁盘上的文件,并用Draw方法来显示图片。CIamge类的成员函数中还有很多可以实现显示图片。例如BitBlt办法。如以下代码:

image.BitBlt(GetDC()->m_hDC,0,0,320,240,0,0,SRCCOPY);

Bitblt方法同CDC类的Bitblt函数一样,是一比一地复制图像并显示在屏幕上,支持对源图像取反,也就是反色显示。这样功能通过BitBlt的最后一个参数来实现,比如参数为NOTSRCCOPY就是反色显示。

MaskBlt可以将图片与目的图片进行特殊的光栅操作并进行掩码处理。

PlgBlt函数可以将图片拉伸成平行四边形进行显示。

StretchBlt函数可以将图片进行拉伸显示。

>>创建图片

CImage的Creat函数和CreatEx函数用来创建空白图片,编程人员可以利用这个函数来创建图像,并添加代码让用户可以使用鼠标来改变CImage对象的像素颜色,以实现类似于windows画图的功能。

pDC->MoveTo(10,10);//定义起点

pDC->LineTo(200,20);//线的终点

pDC->SelectObject(oldPen);//将以前的画笔选入设备描述表

5、CArry

CArray类支持与C arrays相似的数组,但是必要时可以动态压缩并扩展。数组索引从0开始。可以决定是固定数组上界还是允许当添加元素时扩展当前的边界。内存对上界是连续地分配空间,甚至一些元素可为空。

在使用一个数组之前,使用SetSize建立它的大小和为它分配内存。如果不使用SetSize,则为数组添加元素就会引起频繁地重新分配和拷贝。频繁地重新分配和拷贝不但没有效率,而且导致内存碎片

MFC提供了一套模板库,来实现一些比较常见的数据结构如Array,List,Map。CArray即为其中的一个,用来实现动态数组的功能。CArray是从CObject派生,有两个模板参数,第一个参数就是CArray类数组元素的变量类型,后一个是函数调用时的参数类型。有一个类
class Object,要定义一个Object的动态数组,那么可以用以下两种方法:

CArray<Object,Object> Var1;

CArray<Object,Object&> Var2;

Var2的效率要高。

时间: 2024-10-28 10:00:18

C++几个常用类介绍第一篇的相关文章

C#文件读写常用类介绍

首先要熟悉.NET中处理文件和文件夹的操作.File类和Directory类是其中最主要的两个类.了解它们将对后面功能的实现提供很大的便利.      本节先对和文件系统相关的两个.NET类进行简要介绍.  System.IO.File类和System.IO.FileInfo类主要提供有关文件的各种操作,在使用时需要引用System.IO命名空间.下面通过程序实例来介绍其主要属性和方法.  (1) 文件打开方法:File.Open () 该方法的声明如下: public static FileS

Activiti常用类介绍

为什么要使用工作流? 传统的设计在流程发生变化时的弊端: 1. 流程相关的属性和业务对象的属性,都放到了业务对象中. 2. 流程相关的逻辑和业务逻辑,都放到的业务逻辑中 常用类 ProcessEngineConfiguration 流程引擎配置对象(配置数据库连接信息和建表策略) ProcessEngine 流程引擎的核心对象(检查环境是否正确,管理各种服务) RepositoryService 仓库服务对象(管理部署信息) RuntimeService 运行时服务对象(管理流程的启动,流转等操

iOS开发中常用的轮子 第一篇

为避免重复造轮子,很多效果和功能都可以从github上找到.清点以前的项目,整理出了很多用过的开源代码,每天奉送10个. 第一篇  同色的代表是实现了同个功能,按自己需求挑选一个 项目名称 项目信息 1. AFNetworking 作者是 NSHipster 的博主, iOS 开发界的大神级人物, 毕业于卡内基·梅隆大学, 开源了许多牛逼的项目, 这个便是其中之一, AFNetworking 采用 NSURLConnection + NSOperation, 主要方便与服务端 API 进行数据交

Foundation Kit常用类介绍

Foundation Kit是OS X类库和IOS类库共享的基础类库,里面提供了很多封装类,具体可以见https://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/ObjC_classic/,下面介绍一些常用类. 1.字符串类:NSString和NSMutableString. NSMutableString继承于NSString,两者的区别是:NSMutableString是可变的,而NSStr

转 java集合常用类 介绍

集合的结构如下图所示: 集合的两个顶级接口分别为:Collection和Map Collection下有两个比较常用的接口分别是List(列表)和Set(集),其中List可以存储重复元素,元素是有序的(存取顺序一致),可以通过List脚标来获取指定元素;而Set不可以有重复元素,元素是无序的. List接口中,比较常用的类有三个:ArrayList.Vactor.LinkedList. ArrayList :线程不安全的,对元素的查询速度快. Vector :线程安全的,多了一种取出元素的方式

MFCC常用类介绍

http://www.cnblogs.com/lzmfywz/archive/2012/04/22/2465069.html CStatic CObject └CCmdTarget └CWnd └CStatic CStatic类提供了一个Windows静态控件的性能.一个静态控件用来显示一个文本字符串,框,矩形,图标,光标,位图,或增强的图元文件.它可以被用来作为标签,框,或用来分隔其它的控件.一个静态控件不接收输入,也不提供输出:但是,如果它是用SS_NOTIFY风格创建的,则它可以通知其父有

java集合常用类介绍

List接口: 一:ArrayList private static final int DEFAULT_CAPACITY = 10; private static final Object[] EMPTY_ELEMENTDATA = {}; private transient Object[] elementData; private int size; 用数组来存储元素,也就是基于 Object[]来管理元素,等于数组的加强版,在add()方法时先调用ensureCapacityIntern

C#_文件读写常用类介绍

首先要熟悉.NET中处理文件和文件夹的操作.File类和Directory类是其中最主要的两个类.了解它们将对后面功能的实现提供很大的便利.      本节先对和文件系统相关的两个.NET类进行简要介绍.  System.IO.File类和System.IO.FileInfo类主要提供有关文件的各种操作,在使用时需要引用System.IO命名空间.下面通过程序实例来介绍其主要属性和方法.  (1) 文件打开方法:File.Open () 该方法的声明如下: public static FileS

Java网络通信常用类介绍(Java.net包)

InetAddress类:表示互联网协议 (IP) 地址 URL类:代表一个统一资源定位符,它是指向互联网"资源"的指针. 资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询. URLConnection类:用于读取和写入此 URL 引用的资源. 使用步骤: 通过在 URL 上调用 openConnection 方法创建连接对象. 处理设置参数和一般请求属性. 使用 connect 方法建立到远程对象的实际连接. 远程对象变为可用.远程对象的头字段