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的效率要高。






   

你可能感兴趣的:(新手)