第03章 通用函数通用类.ppt
第第0303章章 通用函数及通用类通用函数及通用类 主要内容主要内容v通用函数通用函数AfxGetAppAfxGetAppAfxGetMainWndAfxGetMainWndAfxMessageBoxAfxMessageBoxMessageBoxMessageBox函数函数v通用类通用类CStringCStringCPointCPointCRectCRectCTimeCTime3.1 3.1 通用函数通用函数vAfxGetAppAfxGetApp()()获得指向当前应用程序的指针,全局函获得指向当前应用程序的指针,全局函数,可以在任何函数中调用。数,可以在任何函数中调用。vAfxGetMainWndAfxGetMainWnd()()获得指向当前应用程序的主窗口的指针,获得指向当前应用程序的主窗口的指针,全局函数。全局函数。vAfxMessageBoxAfxMessageBox()()调用消息框函数,全局函数调用消息框函数,全局函数3.1 3.1 通用函数通用函数vMessageBoxMessageBox函数的原型:函数的原型:intint MessageBox(LPCTSTRMessageBox(LPCTSTR lpszTextlpszText,LPCTSTR LPCTSTR lpszCaptionlpszCaption=NULL,UINT=NULL,UINT nTypenType=MB_OK);=MB_OK);其中,第一个参数是其中,第一个参数是显示给用户看的消息显示给用户看的消息文字文字,第二个参数是显示在消息框标题栏,第二个参数是显示在消息框标题栏中的中的标题文字标题文字,第三个参数是显示给用户,第三个参数是显示给用户看的看的按钮组合和消息文字旁的图标类型按钮组合和消息文字旁的图标类型。函数MessageBoxMessageBox还将返回一个结果值结果值,用来指示用户单击了哪个按钮。IDID按钮按钮MB_ABOUTETRYIGNOREMB_ABOUTETRYIGNOREAboutAbout、RetryRetry、IgnoreIgnoreMB_OKMB_OKOKOKMB_OKCANCELMB_OKCANCELOKOK、CancelCancelMB_RETRYCANCELMB_RETRYCANCELRetryRetry、CancelCancelMB_YESNOMB_YESNOYesYes、NoNoMB_YESNOCANCELMB_YESNOCANCELYesYes、NoNo、CancelCancel第三个参数可指定的按钮组合第三个参数可指定的按钮组合IDID图标图标MB_ICONINFORMATIONMB_ICONINFORMATION信息性图标信息性图标MB_ICONQUESTIONMB_ICONQUESTION问号图标问号图标MB_ICONSTOPMB_ICONSTOP停止信号图标停止信号图标MB_ICONEXCLAMATIONMB_ICONEXCLAMATION惊叹号图标惊叹号图标可显示图标的可显示图标的ID号和类型对应表号和类型对应表 当确定指定了按钮组合之后,需要捕获当确定指定了按钮组合之后,需要捕获返回值,以便确定用户单击了哪个按钮。返回值,以便确定用户单击了哪个按钮。返回值定义为整型。返回值定义为整型。返回值返回值IDID如下表。如下表。IDID单击的按钮单击的按钮IDABOUTIDABOUTAboutAboutIDRETRYIDRETRYRetryRetryIDIGNOREIDIGNOREIgnoreIgnoreIDYESIDYESYesYesIDNOIDNONoNoIDOKIDOKOKOKIDCANCELIDCANCELCancelCancel3.2 通用类1 1、字符串类字符串类CStringCStringvCStringCString类是类是MFCMFC提供的字符串类,其提供的字符串类,其主要功能是对字符串进行操作。主要功能是对字符串进行操作。vCStringCString类定义的变量称为字符串变量,类定义的变量称为字符串变量,该变量可以直接用常量赋值,也可调该变量可以直接用常量赋值,也可调用用CStringCString类中定义的成员函数。类中定义的成员函数。v查查MSDNMSDN3.2 通用类v字符串实例字符串实例字符串连接字符串连接字符串提取字符串提取字符串变换字符串变换格式化字符串格式化字符串void void CCGeneralView:OnLButtonDown(UINTCCGeneralView:OnLButtonDown(UINT nFlagsnFlags,CPointCPoint point)point)/TODO:Add your message handler code here and/or call/TODO:Add your message handler code here and/or call defaultdefault/AfxMessageBox(viewAfxMessageBox(view clicked);clicked);/MessageBox(ViewMessageBox(View clicked);clicked);/*/*CStringCString str1,str2(student);str1,str2(student);str1=hello;str1=hello;str1+=str2;str1+=str2;CStringCString str3(what),str4;str3(what),str4;str4=str1+str2+str3;str4=str1+str2+str3;MessageBox(str4);MessageBox(str4);CStringCString str5=str4.Left(2)+str4.Mid(2,3)+str4.Right(3);str5=str4.Left(2)+str4.Mid(2,3)+str4.Right(3);MessageBox(str5);*/MessageBox(str5);*/*/*intint i=5;i=5;float j=6.5;float j=6.5;CStringCString str1;str1;str1.Format(%d,%f,i,j);str1.Format(%d,%f,i,j);MessageBox(str1);*/MessageBox(str1);*/实例实例3.2 3.2 显示应用程序名称显示应用程序名称void void CGeneralView:OnLButtonDown(UINTCGeneralView:OnLButtonDown(UINT nFlagsnFlags,CPointCPoint point)point)CStringCString strstr=AfxGetAppAfxGetApp()-()-m_pszAppNamem_pszAppName;MessageBox(strMessageBox(str););CView:OnLButtonDown(nFlagsCView:OnLButtonDown(nFlags,point);,point);3.2 通用类2 2、坐标类、坐标类CPointCPointv类类CPointCPoint是对是对WindowsWindows结构结构POINTPOINT的封装,凡是能的封装,凡是能用用POINTPOINT结构的地方都可以用结构的地方都可以用CPointCPoint代替。代替。v结构结构POINTPOINT表示屏幕上的一个二维点,定义为:表示屏幕上的一个二维点,定义为:typedeftypedef structstruct tagPOINTtagPOINT LONG x;LONG x;LONG y;LONG y;POINT;POINT;其中,其中,x x、y y分别为点的横坐标和纵坐标。分别为点的横坐标和纵坐标。3.2 3.2 通用类通用类v坐标类实例坐标类实例加法运算加法运算显示鼠标坐标显示鼠标坐标/*/*intint x=x=point.xpoint.x;intint y=y=point.ypoint.y;CStringCString str1;str1;str1.Format(x=%str1.Format(x=%d,yd,y=%=%d d,x,y,x,y););MessageBox(str1);*/MessageBox(str1);*/3.2 3.2 通用类通用类3 3、区域类、区域类CRectCRectv类类CRectCRect是对是对WindowsWindows结构结构RECTRECT的封装,凡的封装,凡是能用是能用RECTRECT结构的地方都可以用结构的地方都可以用CRectCRect代替。代替。v结构结构RECTRECT表示矩形的位置和尺寸,数据成表示矩形的位置和尺寸,数据成员表示左上角坐标和右下角坐标,定义为:员表示左上角坐标和右下角坐标,定义为:typedeftypedef structstruct tagRECTtagRECT LONG left;LONG left;LONG top;LONG top;LONG right;LONG bottom;LONG right;LONG bottom;RECT;RECT;CRectCRect rect1(0,0,200,300);rect1(0,0,200,300);CPointCPoint point1(10,10);point1(10,10);rect1+=point1;rect1+=point1;intint x=rect1.Width();x=rect1.Width();intint y=rect1.Height();y=rect1.Height();CPointCPoint point2=rect1.TopLeft();point2=rect1.TopLeft();CPointCPoint point3=rect1.BottomRight();point3=rect1.BottomRight();CStringCString str1;str1;str1.Format(Widthstr1.Format(Width:%d,Height:%dnd,Height:%dn Topleft:%d,%dnBottomRight:%d,%d,x,y,point2.x,poiTopleft:%d,%dnBottomRight:%d,%d,x,y,point2.x,point2.y,point3.x,point3.y);nt2.y,point3.x,point3.y);MessageBox(str1);MessageBox(str1);3.2 3.2 通用类通用类4 4、大小类、大小类CSizeCSizev类类CSizeCSize是对是对WindowsWindows结构结构SIZESIZE的封装,凡的封装,凡是能用是能用SIZESIZE结构的地方都可以用结构的地方都可以用CSizeCSize代替。代替。v结构结构SIZESIZE表示一个矩形的长度和宽度表示一个矩形的长度和宽度 ,定,定义为:义为:typedeftypedef structstruct tagSIZEtagSIZE intint cxcx;intint cy;cy;SIZE;SIZE;CRectCRect rect1(0,0,100,200);rect1(0,0,100,200);CRectCRect rect2;rect2;CPointCPoint pt1(20,50);pt1(20,50);rect2=rect1+pt1;rect2=rect1+pt1;CSizeCSize size=rect2.Size();size=rect2.Size();CStringCString strstr;str.Format(%d,%d,size.cx,size.cystr.Format(%d,%d,size.cx,size.cy););MessageBox(strMessageBox(str););3.2 3.2 通用类通用类5 5、时间类、时间类CTimeCTimevMFCMFC中的中的CTimeCTime类封装了对日期和时间的类封装了对日期和时间的常用操作。常用操作。v实例实例CTimeCTime m_timem_time=CTime:GetCurrentTimeCTime:GetCurrentTime()();CStringCString s=s=m_time.Formatm_time.Format(%H:%M:%S%H:%M:%S);CStringCString m_strTimem_strTime=当前时间是:当前时间是:+s;+s;MessageBoxMessageBox(m_strTimem_strTime);/*/*CTimeCTime time1(2009,9,10,10,3,25);time1(2009,9,10,10,3,25);CStringCString strstr=time1.Format(%y-%m-%d=time1.Format(%y-%m-%d%H:%M:%S);%H:%M:%S);MessageBox(strMessageBox(str););CTimeCTime time2=time2=CTime:GetCurrentTimeCTime:GetCurrentTime();();CStringCString str1=time2.Format(%H:%M:%S);str1=time2.Format(%H:%M:%S);MessageBox(str1);*/MessageBox(str1);*/小结小结v通用函数通用函数AfxGetAppAfxGetAppAfxGetMainWndAfxGetMainWndAfxMessageBoxAfxMessageBoxMessageBoxMessageBox函数函数v通用类通用类CStringCStringCPointCPointCRectCRectCSizeCSizeCTimeCTime练习练习vCStringCString:如初始串:如初始串“Hello VC”Hello VC”测试测试大小写,反序,格式化字符型、整型、大小写,反序,格式化字符型、整型、字符串类型等数据字符串类型等数据vCTimeCTime:显示系统当前时间:显示系统当前时间vCPointCPoint、CSizeCSize、CRectCRect混合使用混合使用