MFCWindows应用程序设计第5章MFC的通用类简单数据类5.1群体数据类5.2数据在文档/视图结构程序中的位置5.35.1简单数据类5.1.1点类CPointCPoint类带参数的常用构造函数原型如下:CPoint(intinitX,intinitY);CPoint(POINTinitPt);typedefstructtagPOINT{LONGx;//点的x坐标LONGy;//点的y坐标}POINT;5.1简单数据类5.1.1点类CPointvoidOffset(intxOffset,intyOffset);voidOffset(POINTpoint);operator+=给点补偿一个偏移(增加)voidoperator+=(SIZEsize);voidoperator+=(POINTpoint);operator-=给点补偿一个偏移(减少)operator==检查两个点是否相等operator!=检查两个点是否不等5.1简单数据类5.1.2尺寸类CSizeCSize类带参数的常用构造函数原型如下:CSize(intinitCX,intinitCY);CSize(SIZEinitSize);typedefstructtagSIZE{intcx;//水平大小intcy;//垂直大小}SIZE;5.1简单数据类5.1.3矩形类CRectCRect类带参数的常用构造函数原型如下:CRect(intl,intt,intr,intb);CRect(constRECT&srcRect);CRect(LPCRECTlpSrcRect);CRect(POINTpoint,SIZEsize);CRect(POINTtopLeft,POINTbottomRight);typedefstructtagRECT{LONGleft;LONGtop;LONGright;LONGbottom;}RECT;5.1简单数据类成员函数功能说明intWidth()const;返回矩形的宽度intHeight()const;返回矩形的高度CPoint&TopLeft();返回矩形左上角的点坐标CPoint&BottomRight();返回矩形右下角的点坐标CPointCenterPoint()const;返回CRect的中心点operator+=给CRect补偿一个偏移(增加)operator-=给CRect补偿一个偏移(减少)operator==检查两个矩形是否相等operator!=检查两个矩形是否不等5.1.3矩形类CRect5.1简单数据类成员函数功能说明BOOLPtInRect(POINT)const;确定指定的点是否在CRect之内voidInflateRect(int,int,int,int);增加CRect的宽度和高度voidDeflateRect(int,int,int,int);减少CRect的宽度和高度BOOLIntersertRect(LPCRECTlpRect1,LPCRECTlpRect2);设置CRect等于两个矩形的交集BOOLUnionRect(LPCRECTlpRect1,LPCRECTlpRect2);设置CRect等于两个矩形的并集5.1.3矩形类CRect注意:在传递LPRECT、LPCRECT或RECT结构作为参数的任何地方,都可以使用CRect对象来代替。5.1简单数据类5.1.3矩形类CRect练习:改善放大镜功能,使得只有鼠标在图片区域里才有放大效果。练习:每点击一次鼠标左键,使得窗口中的矩形自动放大。练习:吹泡泡程序提示:可以利用CWnd::GetClientRect获得CWnd客户区域的大小。voidGetClientRect(LPRECTlpRect)const;5.1简单数据类5.1.4字符串类CStringCString类支持字符串类型,并可通过CString类构造函数和一些运算符进行构造。CString类构造函数原型如下:CString();CString(constunsignedchar*psz);CString(constCString&stringSrc);CString(TCHARch,intnRepeat=1);CString(LPCTSTRlpch,intnLength);5.1简单数据类5.1.4字符串类CStringvoidEmpty();强制使字符串长度为0TCHARGetAt(intnIndex)const;返回在给定位置的字符voidSetAt(intnIndex,TCHARch);在给定位置设置一个字符intGetLength()const;返回字符串中字符的个数(不包括字符串结尾的结束符)intFind(TCHARch)const;intFind(LPCTSTRlpszSub)const;intFind(TCHARch,intnStart)const;intFind(LPCTSTRlpszSub,intnStart)const;在一个较大的字符串中查找字符或子字符串5.1简单数据类5.1.4字符串类CStringintReplace(TCHARchOld,TCHARchNew);intReplace(LPCTSTRlpszOld,LPCTSTRlpszNew);用其它字符替换指定的字符CStringLeft(intnCount)const;提取一个字符串的左边一部分CStringRight(intnCount)const;提取一个字符串的右边一部分CStringMid(intnFirst)const;CStringMid(intnFirst,intnCount)const;提取一个字符串的中间一部分voidTrimLeft();voidCString::TrimLeft(TCHARchTarget);voidCString::TrimLeft(LPCTSTRlpszTargets);将字符串左边的空格或指定的字符或字符串删除5.1简单数据类5.1.4字符串类CStringvoidTrimRight();voidCString::TrimRight(TCHARchTarget);voidCString::TrimRight(LPCTSTRlpszTargets);将字符串右边的空格或指定的字符或字符串删除voidFormat(LPCTSTRlpszFormat,...);像sprintf函数一样格式化该字符串operator[]返回在给定位置的字符(作用同于GetAt)operator=给CString对象赋一个新值operator+连接两个字符串并返回一个新字符串operator+=把一个新字符串连接到一个已经存在的字符串的末端5.1简单数据类练习:某一影院具有影片排放系统,其中某数据表中有如下信息:假设通过数据库访问的方式已将影片信息中的第一行第三列数据取出存放到s字符串中,请将s中的导演、主演、地区、影片类型分别存放到s1,s2,s3,s4的字符串中。序号电影名称电影信息1我想和你好好的李蔚然|冯绍峰、倪妮|中国|2D2金刚狼2詹姆斯·曼高德|休·杰克曼、冈本多绪|美国|3D5.2群体数据据类afxtempl.h提供了基于模板的群体数据类和非群体数据类。基于模板的群体数据类有CAarry(数组)、CList(列表)和CMap(映射表类)。CArray声明如下:templateclassTYPE,classARG_TYPEclassCArray:publicCObject定义CArray类对象的语法如下:CArray数组元素的数据类型,成员函数形参的数据类型&对象名;例:CArrayCPoint,CPoint&m_p;5.2群体数据据类数组CArray类的部分成员函数和重载的运算符voidSetSize(intnNewSize,intnGrowBy=-1);intGetSize()const;TYPEGetAt(intnIndex)const;voidSetAt(intnIndex,ARG_TYPEnewElement);intAdd(ARG_TYPEnewElement);intAppend(constCArray&src);voidRemoveAll();TYPE&operator[](intnIndex);5.2群体数据据类练习:编写一程序,当按下鼠标左键时,在鼠标光标位置显示一个随机大小的矩形。5.3数据在文档/视图结构程序中的位置自学作业作业本P1185-1、5-2、5-3、5-6、5-7