C++课程设计MFC.ppt

上传人:牧羊曲112 文档编号:6154053 上传时间:2023-09-30 格式:PPT 页数:148 大小:5.30MB
返回 下载 相关 举报
C++课程设计MFC.ppt_第1页
第1页 / 共148页
C++课程设计MFC.ppt_第2页
第2页 / 共148页
C++课程设计MFC.ppt_第3页
第3页 / 共148页
C++课程设计MFC.ppt_第4页
第4页 / 共148页
C++课程设计MFC.ppt_第5页
第5页 / 共148页
点击查看更多>>
资源描述

《C++课程设计MFC.ppt》由会员分享,可在线阅读,更多相关《C++课程设计MFC.ppt(148页珍藏版)》请在三一办公上搜索。

1、1,C+课程设计,内容及要求,2,主要内容,课程设计基本要求Windows 编程基础什么是C+的MFC什么是MFC编程MFC应用程序的开发流程单文档【ClassView】面板登录对话框与单文档视图联接单文档中菜单项与对话框联接实例介绍,3,一、课程设计基本要求,自学MFC(2学时)知识扩充C+:了解并掌握MFC程序结构、消息映射机制、MFC类库中的常用类(对话框、各种常用控件)。软件开发的基本知识结合设计任务清楚软件开发的基本流程、各个阶段的目标和主要工作。上机调试程序(30学时)其他(14学时)程序调试的基本方法和论文撰写要求(2学时)掌握调试程序的方法与技巧。清楚论文组织结构、格式编排等相

2、关知识学生资料查阅与自主学习(2学时)代码编写(10学时),4,二、Windows 编程基础,Windows 编程就是基于Windows 的应用程序。2种重要的Windows应用程序基于对话框的应用程序基于文档/视图结构的应用程序主要特点具有标准的图形用户界面具有与硬件无关的特性采用“消息传递,事件驱动”的运行机制,即根据Windows发送的消息来处理用户的输入编写Windows应用程序的主要方法(2种)使用Windows提供的应用程序接口(API)函数使用Microsoft提供的微软基础类(MFC),5,三、什么是C+的MFC,MFC(Microsoft Foundation Class L

3、ibrary,基础类库)是微软提供的用来编写Windows应用程序的C+类库;封装了API(Windows的接口函数),是Win API与C+的结合。MFC大约有200多个类,封装了Windows的大部分编程对象以及与它们有关的操作。即它由几百个执行文件和源代码文件组成。注意C+和VC+的区别C+是一种程序设计语言,是一种大家都承认的软件编制的通用规范,即C+是一套语法规则的名字,类似汉语,英语。VC+是一个软件IDE(编译、编辑、调试)集成开发环境 MFC是一个非外挂式的软件包,类库,MFC类是微软为VC+专配的。,6,四、什么是MFC编程,MFC编程指的就是使用VC+进行开发,并且是在使用

4、VC+提供的各种向导的情况下的MFC编程。在VC+中可以创建3类典型的Windows应用程序基于对话框的应用程序单文档界面(SDI)应用程序多文档界面(MDI)应用程序,文档/视图文档对象:用来保存数据。视图对象:用来显示和编辑数据。,7,五、MFC应用程序的开发流程,应用程序编程的基本步骤:(1)根据应用程序的特性在MFC AppWizardexe应用程序中选择合适的应用程序框架。(2)利用资源编辑器编辑资源,如菜单等。(3)利用类向导(ClassWizard)或手工添加类、成员变量、成员函数声明。(4)编写具体的成员函数代码。(5)编译、链接程序检查程序中是否存在语法错误。(6)调试应用程

5、序。,8,六、单文档【ClassView】面板,CAboutDlg(关于对话框类)管理关于对话框。CFrameWnd(框架窗口类)CWxling_27App(应用程序类)用来处理消息。CWxling_27Doc(文档类)MFC中的数据是存储在类文档中。文档类负责管理和维护数据本身。CWxling_27View(视图类)结果的显示是在视图类中。视图类负责处理用户鼠标和键盘的操作。,9,七、登录对话框与单文档视图联接,新建单文档工程:TEXT(注意此名由设计者自己任取);在ResourceView,单击Insert Dialog,插入一对话框IDD_DIALOG1(默认ID号);右键选中新建的对话

6、框,利用类向导建立一个新类Create a new class,名称为:Cdlg_login;在MainFrm.cpp文件的前面,语句#include“MainFrm.h”的后面添加新类的头文件:#include dlg_login.h 在FileView中点击source files,双击MainFrm.cpp。找到:CMainFrame:OnCreate(LPCREATESTRUCT lpCreateStruct),这是窗体框架创建函数。在该函数的后面(在return 0;的前面)加入语句(注意大小写):Cdlg_login dlg;/定义一个登录对话框对象dlgdlg.DoModal()

7、;/让对话框对象以有模式形式显示出来此时对话框与单文档联接完成。下载“格式工厂3.011”将自己的照片转换成BMP格式,通过插入Bitmap命令,将照片引入至资源中,并添加至对话框中。,10,七续、登录对话框退出按钮代码,/确定按钮void CDlg_login:OnOK()/TODO:Add extra validation herethis-UpdateData(true);if(this-m_name=wxl,/取消按钮void CDlg_login:OnCancel()/TODO:Add extra cleanup hereExitProcess(0);/退出,11,八、单文档中菜单项

8、与对话框联接,新建单文档工程:Ys1(注意此名由设计者自己任取);在ResourceView,单击Insert Dialog,插入一对话框IDD_DIALOG1(默认ID号);右键选中新建的对话框,利用类向导建立一个新类Create a new class,名称为:Cdlg_jc(自己命名),如右图1所示;在/Ys1View.cpp:文件中语句#include Ys1View.h的后面添加新类的头文件:#include dlg_jc.h 编辑主菜单如图2所示:在主菜下通过“建立类向导”命令,从“Class name”组合框中选择CYs1View,如图3,4所示,并在函数OnJc()编写代码如下

9、:void CYs1View:OnJc()/TODO:Add your command handler code here Cdlg_jc jc;/定义一个求阶层对话框对象jcjc.DoModal();/让对话框对象以有模式形式显示出来此时单文档菜单项与对话框联接完成。,12,1.求阶层按钮的代码,使用MFC进行程序设计时,如输出结果是单值,可用以下代码作为模板:void Cdlg_jc:OnOK()/TODO:Add extra validation hereUpdateData(TRUE);/更新控件值 double i,jsz=1.0;for(i=1;i=m_srs;i+)jsz*=i;

10、/求阶乘 m_jsz.Format(%f,jsz);/将双精度型转换为字符,f 对应浮点数/其中m_jsz为输出编辑框的成员变量名UpdateData(FALSE);/控件值更新编辑框显示/CDialog:OnOK();,13,/续上for(i=a;iTextOut(x,y,s);/在指定位置输出文本 else pDC-TextOut(x,y,s);/在指定位置输出文本x=x+30;,2.求素数按钮的代码,void Cdlg_zss:OnOK()/TODO:Add extra validation hereUpdateData(TRUE);/更新控件值 CDC*pDC=GetDC();/获取视

11、图初始的客户区DC/DC表示设备环境int a=m_szqz;int b=m_szzz;int i,j,n=0;int x=70,y=220;CString s;if(b=100)/控制只求100内的素,使用MFC进行程序设计时,如输出结果是多值,可用以下代码作为模板:,14,注:CDC类有4个派生类,CClientDC类只能在窗口的客户区(不包括边框、标题栏、菜单栏以及状态栏的空白区域)进行绘图。CMetaFileDC封装了在一个Windows图元文件中绘图的方法。CPaintDC只在处理WM_PAINT消息中使用,用户一旦获得相关的CDC指针,就可以将它当做任何设备环境(包括屏幕、打印机)

12、的指针来使用。CWindowDC允许在窗口的任意位置中进行绘图,点(0,0)指整个窗口的左上角。,在微软基类库MFC中,CDC类是定义设备上下文(DC,设备环境)对象的基类,所有绘图函数都在CDC基类中定义。,15,3.单文档菜单项中画直线代码,菜单项“画直线”按钮代码:void CYs1View:OnHzx()/TODO:Add your command handler code here/使用CClientDC类来画图,创建的是视图窗口的dc对象,作图只能在视图的客服区内作图Invalidate(true);/擦除窗口原有内容重新绘制UpdateWindow();/使窗口立即重绘CClie

13、ntDC dc(this);/创建一个名为dc的视图窗口的dc对象,this指向当前的对话框CPen pen;/设置画笔/创建一支5号粗细画实线的绿色画笔,pen.CreatePen(PS_SOLID,5,RGB(0,255,0);/选用新画笔CPen*oldpen=dc.SelectObject(/线段的终点/RGB(红,绿,蓝),或用CDC类绘图void CYs1View:OnHzx()/Invalidate(true);/刷新屏幕CDC*pDC=GetDC();pDC-MoveTo(100,100);pDC-LineTo(300,500);,16,4.单文档菜单项中画矩形代码,菜单项“画

14、矩形”按钮代码:void CWxling_28View:OnHjx()/TODO:Add your command handler code hereCClientDC dc(this);CPen pen;/定义画笔/创建红色3号粗细实线画笔pen.CreatePen(PS_SOLID,3,RGB(255,0,0);CPen*oldpen=dc.SelectObject(/画矩形,17,5.单文档菜单项中画椭圆代码,菜单项“画椭圆”按钮代码:void CWxling_28View:OnHty()/TODO:Add your command handler code hereCClientDC

15、dc(this);CPen pen;/设置画笔pen.CreatePen(PS_SOLID,3,RGB(0,255,0);CPen*oldpen=dc.SelectObject(/画椭圆/*(int x1,int y1,int x2,int y2)(x1,y1)和(x2,y2)表示所画椭圆外切矩形的左上角和右下角坐标*/,18,6.单文档菜单项中画sin曲线代码,在/Wxl_30View.cpp中加入头文件:#include math.h“菜单项“画sin曲线”按钮代码:void CWxl_30View:OnSin()/TODO:Add your command handler code he

16、reCClientDC dc(this);CRect rect;/定义矩形对象GetClientRect(rect);int x0=rect.Width()/2;int y0=rect.Height()/2;dc.MoveTo(20,y0);dc.LineTo(rect.Width()-20,y0);dc.MoveTo(x0,20);dc.LineTo(x0,rect.Height()-20);double setp=3.14159/100;for(int i=-200;i200;i+)dc.SetPixel(x0+(i/300.0)*rect.Width()/2.0,y0-sin(setp*

17、i)*rect.Height()/4.0,RGB(255,0,0);,19,7.单文档菜单项中画澳运图标代码,void CA12View:OnHy()/TODO:Add your command handler code hereCClientDC dc(this);CPen pen1,pen2,pen3,pen4,pen5;/设置画笔pen1.CreatePen(PS_SOLID,5,RGB(0,0,255);/兰色pen2.CreatePen(PS_SOLID,5,RGB(0,0,0);/黑色pen3.CreatePen(PS_SOLID,5,RGB(255,0,0);/红色pen4.Cr

18、eatePen(PS_SOLID,5,RGB(255,255,0);/黄色pen5.CreatePen(PS_SOLID,5,RGB(0,255,0);/绿色/创建一支透明画刷,这样先前画的图不会被后面画的挡住CBrush brush1;/设置画刷,在对话框不要此句/类名可以调用静态成员函数,而不可以调用非静态成员函数。但是对象都可以调用。CBrush*brush1=CBrush:FromHandle(HBRUSH)GetStockObject(NULL_BRUSH);/CBrush*pOldbrush=dc.SelectObject(brush1);/选择透明画刷,在对话框不要此句 CBru

19、sh*pOldbrush=dc.SelectObject(/画红色圆,20,8.常见问题解决方法,(1)如何删除一个新建的类?先从workspace中的fileview中删除对应的.h和.cpp文件。再关闭项目,从实际的文件夹中删除对应的.h和.cpp文件。再删除.clw文件。打开项目,全部重建(rebuild all)。(2)某个类突然在工作区间里面突然看不见了?只是类隐藏了,打开FILEVIEW,找到隐藏类的头文件,随便敲一下键盘的空格键,类就会在CLASSVIEW中显示了(3)为什么MFC 中自动显示成员列表功能时有时无?删除该项目扩展名为.ncb 文件,重新打开该项目。(4)如何在应用

20、程序中打开一个超级链接?使用ShellExecute API 函数。例:打开中南大学网站。,NULL,NULL,SW_SHOWNORMAL);,ShellExecute函数原型:HINSTANCE ShellExecute(HWND hwnd,LPCTSTR lpOperation,LPCTSTR lpFile,LPCTSTR lpParameters,LPCTSTR lpDirectory,INT nShowCmd);,21,8.常见问题解决方法,(5)怎样改变VC+编辑器默认的颜色?工具/选择/格式,选中注释的颜色即可改变。(6)复制了一段代码到当前工作空间里,可是代码排列很乱,如何调整?

21、按下鼠标左键拖动鼠标将代码选择上,同时按下键盘的ALT+F8 键(7)设置单文档中标题栏和窗口大小对主框架添加函数PreCreateWindow(),代码如下:BOOL CMainFrame:PreCreateWindow(CREATESTRUCT,22,8.常见问题解决方法,(8)如何处理按回车或ESC键对话框关闭?主要是由于回车键响应OnOK()函数、ESC键响应OnCancel()函数而引起的,解决方法是在Cdlg_js类中添加PreTranslateMessage函数(将按键消息转换成字符消息),代码如下,使用消息传递时过滤掉这两个键盘消息。BOOL Cdlg_js:PreTransl

22、ateMessage(MSG*pMsg)/TODO:Add your specialized code here and/or call the base classif(pMsg-message=WM_KEYDOWN)/键盘消息 if(pMsg-wParam=VK_ESCAPE)/键盘上的Esc键return TRUE;if(pMsg-wParam=VK_RETURN)/键盘上的回车键return TRUE;return CDialog:PreTranslateMessage(pMsg);,23,8.常见问题解决方法,建好MFC之后(基于对话框的),然后点击Insert-New Class弹

23、出对话框之后,Class Type:MFC Class在Base Class:CRecordset类,点击Ok的时候,会弹出要你添加数据库的对话框你就可以添加了。(9)如何为MFC 应用程序添加ODBC 功能?(1)在文件Stdafx.h 文件末尾添加下面一行:#include/MFC ODBC database classes(2)在文本模式下编辑RC 文件(利用File-Open As text 方式)在下面的程序行(共有两处)#include l.chsafxprint.rc/printing/print preview resources 添加下一行:#include l.chsafx

24、db.rc/Database resources,24,9.特殊效果,(1)如何给MFC单文档添加背景?为CTestView类添加一个变量CBrush m_brushBackground;/定义画刷用于画背景在CTestView的构造函数中加入如下代码CBitmap bmp;bmp.LoadBitmap(IDB_BITMAP1);/加载位图m_brushBackground.CreatePatternBrush(编译运行该程序!,25,9.特殊效果,(2)在工程调用其他可执行的文件(.EXE)在w1View.cpp:中加入头文件:#include windows.h 在编辑好的菜单项中编写代码

25、如下void CW1View:OnWord()/TODO:Add your command handler code hereWinExec(CLOCKYS.exe,NULL);/调用可执行文件注意:将可执行文件拷贝至本工程所在的文件夹下,否则要获取文件的路径。若要打开其他类型的文件,见本片的下面的备注。,26,9.特殊效果,(3)在工程调用其他任意文件菜单项按钮代码void CW12View:OnYy()/TODO:Add your command handler code hereCString path;/返回文件所在的路径,含该文件名GetModuleFileName(NULL,/要获

26、取文件名的模块句柄(见备注),null表示当前模块 path.GetBufferSetLength(MAX_PATH+1),/存放取得的文件名MAX_PATH/存放取得的文件名参数的长度);path.ReleaseBuffer();/字符串的缓冲区长度锁定解除 int pos=path.ReverseFind();/从后向前查找 path=path.Left(pos)path=path.Left(pos);/取左,参数为字符串的个数/MessageBox(path);/调试程序时用来显示查找到的当前运行程序所在目录 ShellExecute(NULL,open,path+2013年C+课程设计

27、任务书wxl.doc,NULL,NULL,SW_SHOWNORMAL);,27,9.特殊效果,(4)仅修改工程中某个对话框的图标对对应的对话框添加初始化函数OnInitDialog(),并添加以下代码:BOOL Cdlg_login:OnInitDialog()CDialog:OnInitDialog();/TODO:Add extra initialization hereHICON m_hIcon;/IDR_ICON1为图标资源名 m_hIcon=AfxGetApp()-LoadIcon(IDI_ICON1);SetIcon(m_hIcon,TRUE);/Set big iconSetIc

28、on(m_hIcon,FALSE);/Set small iconreturn TRUE;/return TRUE unless you set the focus to a control/EXCEPTION:OCX Property Pages should return FALSE,28,9.特殊效果,如何去掉单文档界面中主框架的“无标题”?修改IDR_MAINFRAME字符串资源中第2个参数(共有7个参数),分别以n结束,即如下格式:nnnnnnn例,将主框架标题改为”我的应用程序”,29,在程序中使用对话框,(4)用鼠标将新添加的菜单项拖到“查看”和“帮助”菜单项 之间,结果如图所示

29、。,菜单项“对话框”拖放后的位置(5)选择“查看”“建立类向导”菜单命令或直接按Ctrl+W快捷键,则出现MFC ClassWizard对话框,该对话框会自动切换到Message Maps页面。(6)从“Class name”组合框中选择CMainFrame,在Object Ids列表中选择ID_TEST_DLG,然后在Messages框中选择COMMAND消息。,30,在程序中使用对话框,(7)单击Add Function按钮或双击COMMAND消息,出现“Add Member Function”对话框以输入成员函数的名称。系统默认的函数名为OnTestDlg,如图所示。该函数是对菜单项ID

30、_TEST_DLG的映射,也就是说,当在应用程序运行时,用户选择“对话框”,则该函数OnTestDlg被调用,执行函数中的代码。,31,在程序中使用对话框,单击OK按钮,在ClassWizard的“Member functions”列表中将列出新增加的成员函数。选择此函数,单击Edit Code按钮(或直接在函数名双击鼠标),在此成员函数中添加下列代码:void CMainFrame:OnTestDlg()CFirstDlg dlg;/定义对话框类对象 dlg.DoModal();/显示对话框 代码中,DoModal是CDialog基类成员函数,它是用来显示和终止模式对话框。,32,在程序中使

31、用对话框,在OnTestDlg函数的实现文件MainFrm.cpp的前面添加CFirstDlg类的头文件包含,即:,#include Ex_SDI.h#include MainFrm.h#include FirstDlg.h“,(10)编译并运行。在应用程序菜单上,选择“测试”“对话框”菜单项,将出现如图的对话框,这个对话框就是刚才添加的对话框。,33,几种常见的几何图形绘制。,利用MFC AppWizard建立一个SDI应用程序,在OnDraw()函数中添加如下程序代码:void CMyGraphView:OnDraw(CDC*pDC)CTexthtDoc*pDoc=GetDocument(

32、);ASSERT_VALID(pDoc);/TODO:add draw code for native data here for(int xPos=20;xPosSetPixel(xPos,30,RGB(0,0,0);/绘制像素点 POINT polylpt5=10,100,50,60,120,80,80,150,30,130;pDC-Polyline(polylpt,5);/绘制4条折线 POINT polybpt4=150,160,220,60,300,180,330,20;pDC-PolyBezier(polybpt,4);/绘制贝塞尔曲线 CBrush*pBrhOld;pBrhOld

33、=(CBrush*)pDC-SelectStockObject(LTGRAY_BRUSH);/使用浅灰色堆画刷 pDC-RoundRect(400,30,550,100,20,20);/绘制圆角矩形 pDC-Arc(20,200,200,300,200,250,20,200);/绘制椭圆弧 pDC-Pie(220,200,400,380,380,270,240,220);/绘制扇形 pDC-Chord(420,120,540,240,520,160,420,180);/绘制弦形 POINT polygpt5=450,200,530,220,560,300,480,320,430,280;pDC

34、-Polygon(polygpt,5);/绘制五边形 pDC-SelectObject(pBrhOld);/恢复系统默认的画刷,34,绘制效果,35,九、实例介绍,实例1静态控件的使用实例2编辑框应用实例3单选钮应用程序实例4简易时钟应用程序实例5计算器应用程序实例6调用自定义对话框实例7数据库编程实例,返回目录,36,实例1静态控件的使用,创建步骤:建立基于对话框的MFC应用程序框架;设置对话放置控件;在菜单或工具栏的空白处,单击右键,弹出控件工具栏,再选择所需控件;设置控件属性;调试程序,37,步骤1:建立基于对话框应用程序框架,(1)创建工程:TEST1,38,步骤2、3:放置控件;调试

35、程序,(1)删除现有控件(2)设置对话框标题利用“属性”设置(3)添加组框设置属性(4)添加静态文本框设置属性(5)添加图片单击“插入/资源”命令,通过菜单引入:(位图(BMP或DIB)、图标(Icon)、图元文件(wMF)图片控件属性对对话框中的类型、图像进行设置,返回实例,39,特殊效果对话框中设置静态文本框字体及颜色,操作步骤:1.添加对话框类声明中字体和颜色变量 class CDHK2013Dlg:public CDialog/Constructionpublic:CFont m_myFont;/字体对象 COLORREF m_myColor;/颜色对象.2.在对话框初始化函数OnIn

36、itDialog()中对字体和颜色进行初始化m_myFont.CreatePointFont(150,_T(“华文彩云”);/150是字体大小m_myColor=RGB(255,0,255);,40,续上:,3.为对话框类添加WM_CTLCOLOR消息响应函数,并在其消息响应函数OnCtlColor()中添加代码/消息响应函数实现 HBRUSH CDHK2013Dlg:OnCtlColor(CDC*pDC,CWnd*pWnd,UINT nCtlColor)HBRUSH hbr=CDialog:OnCtlColor(pDC,pWnd,nCtlColor);/TODO:Change any att

37、ributes of the DC here(在此更改 DC 的任何属性)if(pWnd-GetDlgCtrlID()=IDC_STATIC_1)pDC-SelectObject(,41,实例2编辑框应用,创建步骤:建立基于对话框的MFC应用程序框架;设置对话放置控件;设置控件属性;为控件连接变量,即为控件命名;添加并且编写消息处理函数;调试程序。,42,步骤1,2:建立框架、添加控件,(1)创建工程:TEST2(2)添加控件,并设置控件相关属性,43,步骤3:连接变量,(1)单击“建立类向导”命令,启动类向导;(2)选择“成员变量”选取项卡,连接变量;(3)结果如右图所示,44,BOOL C

38、TEST2Dlg:OnInitDialog()CDialog:OnInitDialog();/Add About.menu item to system menu.m_avg=0.0;UpdateData(FALSE);/省略,步骤4:进行消息映射,(1)初始化对话框(是程序运行时的开始状态的设定)进入ClassWiZard(类向导),Message Maps,在Object IDs里选择要添加OnInitDialog()函数的对话框类,在Messages里选择WM_INITDIALOG,单击Add Function(增加函数),此时对话框类就新增了一个函数是OnInitDialog()。(2

39、)编辑初始化代码:,45,void CTEST2Dlg:OnJs()/TODO:Add your control notification handler code hereUpdateData(TRUE);/更新控件值 double avg=double(m_sx+m_yw+m_yy)/3.0;m_avg.Format(%6.2f,avg);UpdateData(FALSE);/控件值更新编辑框显示,步骤5:编写代码_对“计算平均分”按钮,(1)双击“计算平均分”按钮,为IDC_JS添加BN_CLICKED消息映射:(2)编写代码。,46,步骤6:编写代码_对“退出”按钮,(1)双击“退出”

40、按钮,为IDC_OK添加BN_CLICKED消息映射:(2)编写代码。,void CTEST2Dlg:OnOk()/TODO:Add your control notification handler code hereOnOK();,47,步骤7:调试程序_运行,注意:对话框中平均分显示部分是在设置属性时,选择了“扩展样式”选项卡中的“客户边缘”选项的效果。,返回实例,48,实例3单选钮应用程序,设计如右图所示的程序。基本步骤:创建工程TESTp246,并进行界面设计;为编辑框连接到CString类型的添加成员变量m_xm,其余控件不需连接;为控件编辑ID4.对单选钮编写初始化函数代码5.对

41、对话框的“确定”按钮编写代码,49,步骤13:建立框架,连接变量,编辑ID,注意对组框1中2个单选按钮,在设置第一个按钮(男)的属性时,需选定“组”选项,表示此组默认第1个按钮;同理对组框2中3个单选按钮,在设置第一个按钮(教授)的属性时,需选定“组”选项,表示此组默认第1个按钮;组框本身的属性不要选中“组”选项。,50,步骤4:单选钮初始化函数代码,BOOL CTESTp246Dlg:OnInitDialog()CDialog:OnInitDialog();CheckRadioButton(IDC_RADIO1,IDC_RADIO2,IDC_RADIO1);CheckRadioButton(

42、IDC_RADIO3,IDC_RADIO5,IDC_RADIO3);/Add About.menu item to system menu.,表示为默认按钮,51,步骤5:对话框的“确定”按钮代码,void CTESTp246Dlg:OnButton1()/TODO:Add your control notification handler code hereUpdateData(TRUE);CString s;s=s+m_xm;if(IsDlgButtonChecked(IDC_RADIO1)s=s+男;elses=s+女;if(IsDlgButtonChecked(IDC_RADIO3)s

43、=s+教授;else if(IsDlgButtonChecked(IDC_RADIO4)s=s+副教授;elses=s+讲师;AfxMessageBox(s);,返回实例,52,实例4简易时钟程序基于对话框,基本步骤:创建工程(基于基本对话框的)CLOCKYS(时钟演示)添加新类CClockEx,实现时钟控件类。添加消息响应及函数,来建立时钟控件的轮廓。时钟设计时钟元素创建时钟基类CClockElement添加时针类、分针类、秒针类编译执行。步骤1:创建工程CLOCKYS,返回实例,53,步骤2:创建一个新类CClockEx,从CStatic(静态控件)类派生出类CClockEx来实现时钟控件

44、类,这样,就可以继承MFC静态控件的很多已经具备的功能和特点.,54,步骤3:添加消息响应建立时钟控件的轮廓,时钟控件的轮廓单击“查看建立类向导”调出Class Wizard,在class name中选择刚建立的新类CClockEx,进行如下工作:,重载虚函数PreSubClassWindow对时钟控件的基本初始化工作将在该函数中进行。添加WM_PAINT消息响应用于完成时钟的绘制工作。添加WM_SIZE消息响应以便设计的时钟控件能自动适应其大小的变化。添加WM_TIMER的消息响应定时刷新时钟控件让它走动。此时,时钟控件的轮廓已建好。效果如图所示。,55,步骤4:时钟设计时钟元素,时钟绘制的

45、具体实现。时钟大致由:时钟背景、时针、分针、秒针4个部分构成。这4个部分可看作4个不同的对象,可以考虑建立类来分别实现。CClockBackground(背景)CClockHourHand(时针)CClockMinHand(分针)CClockSecHand(秒针)这4个类有它们的共同点:都有自己的绘图函数;都有自己的绘图颜色;都应有颜色设置函数;都有绘图区域和区域设置函数等等。因此,可以为它们的共性建立一个基类,命名为:CClockElement(时钟元素)。,56,步骤4续:创建时钟基类CClockElement,先建各个组成类的基类:CClockElement方法:右键单击ClassVie

46、w的工程选择New Class;在ClassType里面选择Genenric Class,类;CClockElement不需要从其它类派生,所以Base Class可以不填,效果如右图所示。,57,步骤4续:创建时钟基类CClockElement代码,对类CClockElement的源代码进行编写。添加头文件#include 因后面的绘图中需要用到sin和cos这两个数学计算公式。为后面计算使用,定义数学常量 PI(3.1415926535)。在基类中定义绘图区域变量时钟的每个组成部分都有绘图区域区域,可定义颜色变量。为了是颜色不显得单调,这里为每个控件设置两种颜色(如果想使程序更加绚丽,可以

47、设置更多颜色)。增加接口函数这些变量需增加接口函数来进行访问。每个组成部分都应该有的Draw(绘图)函数也需在基类中定义,但是,该函数对于基类来说是无需函数实现的,因此可定义为纯虚函数。,58,步骤4续:创建时钟基类CClockElement代码,/ClockElement.h:interface for the CClockElement class.CClockElement的实现的头文件代码如下:#if!defined(AFX_CLOCKELEMENT_H_08A9DFB3_95C0_4D70_9BC0_96D3BACAB74A_INCLUDED_)#define AFX_CLOCKEL

48、EMENT_H_08A9DFB3_95C0_4D70_9BC0_96D3BACAB74A_INCLUDED_#if _MSC_VER 1000#pragma once#endif/_MSC_VER 1000#include#define PI 3.1415926535class CClockElement public:void SetColor(COLORREF crMain,COLORREF crOther);/设置颜色void SetTime(const CTime,59,CClockElement的实现的源文件关键代码如下:,/ClockElement.cpp:CClockElemen

49、t:CClockElement()/时钟基类构造函数m_nRadius=0;/时钟半径m_crMain=RGB(255,255,255);/主要颜色m_crOther=RGB(128,128,128);/辅助的其他颜色CClockElement:CClockElement()/时钟基类析构函数/设置绘图区域函数void CClockElement:SetRegion(LPRECT lprcRect)m_rcRegion=lprcRect;/区域取值m_nRadius=m_rcRegion.Width()/2;/半径取值if(m_rcRegion.Width()m_rcRegion.Height

50、()/半径的宽度和顶点比较m_nRadius=m_rcRegion.Height()/2;/设置当前时间函数void CClockElement:SetTime(const CTime/获取其他颜色,60,步骤5:创建时钟背景类CClockBackground,时钟背景类CClockBackground操作方法:在ClassView的工程名上面点右键,选择New Class,在ClassType里面选择Genenric Class,选择类Base ClassCClockElement类因CClockBackground需从类CClockElement派生效果如图所示。,61,步骤5续:创建时钟

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号