




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、MFC程序设计实验课实验一 VC 程序核心一类的继承与多态 2(一)实验目的:2(二)实验内容:2实验二构造应用程序框架 10(一)实验目的:10(二)实验内容:10(三)实验步骤:10实验三菜单、工具栏与状态栏 14(一)实验目的:14(二)实验内容(一):14(三)实验步骤:15(四)实验内容(二):17(五)实验步骤:17实验四对话框 24(一)实验目的:24(二)实验内容:24(三)实验步骤:24实验五常用控件应用 29(一)实验目的:29(二)实验内容:29(三)实验步骤:30实验六绘图 38(一)实验目的:38(二)实验内容:39(三)实验步骤:39实验七基于文档/视图结构的程序
2、46(一)实验目的:46(二)实验内容:46(三)实验步骤:47实验八数据库编程 56(一)实验目的:56(二)实验内容:56(三)实验步骤:56实验一VC程序核心一类的继承与多态(一)实验目的:1 .学习通过动态内存分配实现动态数组,并体会指针在其中的作用;2 .学习定义和使用类的继承关系,定义派生类;3 .熟悉不同继承方式下对基类成员的访问控制;4 .学习利用虚基类解决二义性问题;5 .掌握运算符重载的方法;6 .学习使用虚函数实现动态多态性。(二)实验内容:第一题:1 .编写并测试 3*3 矩阵转置函数,使用数组保存 3*3 矩阵在使用循环语句实现矩阵元素的行列对调,注意在循环语句中究竟
3、需要对哪些元素进行操作。参考代码#includevoidmove(intmatrix33)inti,j,k;for(i=0;i3;i+)for(j=0;ji;j+)k=matrixij;matrixij=matrixji;matrixji=k;move(data);cout转置后的矩阵的为:endl;for(i=0;i3;i+)for0=0;j3;j+)coutdataijcoutendl;)2 .使用动态内存分配生成动态数组来重新完成上题,使用指针实现函数的功能。函数中使用 new 操作符分配内存生成动态数组。通过 debug 观察指针的内存及其所值的对象中的内容。参考代码#includev
4、oidmove(int*matrix)3 inti,j,k;for(i=0;i3;i+)for0=0;ji;j+)k=*(matrix+i*3+j);*(matrix+i*3+j)=*(matrix+j*3+i);*(matrix+j*3+i)=k;)voidmain()intij;int*p=newint3*3;cout输入矩阵的元素endl;for(i=0;i3;i+)forO=0;j3;j+)cout第i+1行第j+1pi*3+j;cout输入的矩阵的为:endl;for(i=0;i3;i+)for(j=0;j3;j+)coutpi*3+j;coutendl;)move(p);cout转
5、置后的矩阵的为:endl;for(i=0;i3;i+)for(j=0;j3;j+)coutpi*3+j;coutendl;)deletep;)第二题:定义一个车类(vehicle)基类,具 MaxSpeed,Weight 等成员变量,Run,Stop 等成员函数,由此派生出自行车(bicycle)类,汽车(motorcar)类。自行车(bicycle)类有高度(Height)等属性,汽车(motorcar)类有座位数(SeatNum)等属性。从 bicycle 和 motorcar 派生出摩托车(motorcycle)类,在继承过程中,注意把 vehicle 设置为虚基类。如果不把 vehic
6、le 设置为虚基类,会有什么问题?编程试试看。参考代码includeclassvehicleprivate:intMaxSpeed;intWeight;public:vehicle()MaxSpeed=0;Weight=0;vehicle();voidRun()coutNowitisrunning!endl;voidStop()coutNowithasstopped!endl;classbicycle:virtualpublicvehicleprivate:intHeight;public:bicycle();bicycle();classmotorcar:virtualpublicvehic
7、leprivate:intSeatNum;public:motorcar();motorcar();classmotorcycle:publicbicycle,publicmotorcarpublic:motorcycle();-motorcycle();voidmain()motorcyclea;a.Run();a.Stop();第三题:定义 Point 类,有坐标_x,_y 两个成员变量;对 Point 类重载“+”(自增),“-(自减)运算符,实现对坐标的改变。在类中定义整形的私有成员变量_x,_y,定义成员函数 Point&operator+();Point&opera
8、tor+(int);以实现对Point类重载+”运算符, 定义成员函数Point&operator-();Point&operator-(int);以实现对 Point 类重载-运算符。参考代码#include#includeclassPointprivate:int_x,_y;public:Point&operator+();Pointoperator+(int);Point&operator-();Pointoperator-(int);Point()_x=_y=0;intx()return_x;inty()return_y;Point&Point:
9、operator+()_x+;_y+;return*this;PointPoint:operator+(int)Pointtemp=*this;+*this;returntemp;)Point&Point:operator-()_x-;-y-;return*this;)PointPoint:operator-(int)Pointtemp=*this;-*this;returntemp;voidmain()PointA;coutA 的值为:A.x(),A.y()endl;A+;coutA 的值为:A.x(),A.y()endl;+A;coutA 的值为:A.x(),A.y()endl;A
10、-;coutA 的值为:A.x(),A.y()endl;-A;coutA 的值为:A.x(),A.y()endl;)第四题:定义一个车类(vehicle)基类,有 Run,Stop 等成员函数,由此派生出自行车(bicycle)类,汽车(motorcar)类。从 bicycle 和 motorcar 派生出摩托车(motorcycle)类,它们都有 Run,Stop 等成员函数。观察虚函数的作用。在 main()函数中定义 vehicle,bicycle,motorcar,motorcycle 的对象,调用其 Run(),Stop()函数,观察其执行情况。再分别用 vehicle 类型的指针来
11、调用这几个对象的成员函数,看能否成功;把 Run,Stop 定义为虚函数,再试试看。参考代码#includeclassvehicleprivate:intMaxSpeed;intWeight;public:vehicle()MaxSpeed=0;Weight=0;vehicle();virtualvoidRun()coutAvehicleisrunning!endl;virtualvoidStop()coutAvehiclehasstopped!endl;classbicycle:virtualpublicvehicleprivate:intHeight;public:bicycle();bi
12、cycle();voidRun()coutAbicycleisrunning!endl;voidStop()coutAbicyclehasstopped!endl;classmotorcar:virtualpublicvehicleprivate:intSeatNum;public:motorcar();motorcar();voidRun()coutAmotorcarisrunning!endl;voidStop()coutAmotorcarhasstopped!endl;classmotorcycle:publicbicycle,publicmotorcarpublic:motorcycl
13、e();-motorcycle();voidRun()coutAmotorcycleisrunning!endl;voidStop()coutAmotorcyclehasstopped!Run();ptr=&b;ptr-Run();ptr=&c;ptr-Run();ptr=&d;ptr-Run();)实验二构造应用程序框架(一)实验目的:1 .学习使用类向导创建单文档应用程序,多文档应用程序,基于对话框的应用程序三种不同类型的应用程序框架。2.学习三种不同类型程序之间的联系及其区别。(二)实验内容:创建出一个单文档应用程序,能在视图窗口中输出Hello,Welcomet
14、oVisualC+6.0!;创建出一个多文档文档应用程序,能在视图窗口中输出Hello,WelcometoVisualC+6.0!;创建出一个基于对话框的应用,能在对话框中输出HelloWelcometoVisualC+!”。(三)实验步骤:1 单文档应用程序创建过程:(1)在 VisualC+6.0 的启动界面中,选择“FilelNeW,在弹出的“NeW 对话框中单击“Projects 选项卡。(2)选择MFCAppWizard(exe),在Location 编辑框中输入要建立的工程所在的目录。(3)在右上方的“Projectname1编辑框中输入工程名称 Eg3_1,单击 OK 按钮,弹出
15、MFCAppWizard 向导对话框。(4)在第一步中选择 Singledocument,建立一个单文档界面应用程序 SDI。(5)取其默认值,直到第六步结束。(6)添加自己的代码:扩充 Eg3_1View.cpp 中的 OnDraw 成员函数:voidCEg3_1View:OnDraw(CDC*pDC)CEg3_1Doc*pDoc=GetDocument();ASSERT_VALID(pDoc);/TODO:adddrawcodefornativedataherepDC-TextOut(60,100,Hello,WelcometoVisualC+6.0!);(7)更改应用程序的标题:选择工彳
16、区中 ResourceViews 标签,展开 Eg3_1Resources|StringTable,双击StringTable,弹出字符串资源表。双击 IDR_MAINFRAME 项,弹出 StringProperties 对话框。在 Caption 编辑框中将标题修改为单文档应用程序 nEg3_1”。(8)编译、链接并运行,结果如图 2.1。A.EE3_L-单文料应用程序Hella,WelcomeIoVisualC+*E.O!图 2.1 单文档的运行结果2 多文档应用程序多文档(MDI)接口应用程序是指一个应用程序可以同时打开多个文件进行处理。在 MDI 程序中许多程序的细节是与 SDI 程
17、序是相同的。在 MDI 程序中使用了CMultiDocTemplate 模板,以便程序能够处理多个文档,同时也将视图和文档类连接到该模板及 CChildFrame 类,CChildFrame 类支持出现在主窗口内部的 MDI 子窗口。按照上述创建单文档应用程序的步骤创建一个名为 Eg3_2 多文档应用程序,不同的是在创建工程的第一步中选择 multipledocumento编译、链接并运行后,结果如图 2.2:图 2.2 多文档的运行结果3 基于对话框的应用框程序基于对话框的应用程序,是以对话框为形式的应用程序,它对于那些涉及文档较少,主要是交互式操作的应用程序来说比较合适。基于对话框的应用框
18、架和前面介绍的基于文档的应用框架有很大的区别。创建过程(1)在 AppWizard 的第一步,即 MFCAppWizard-Step1 中,选中Dialogbased 单选框按钮。(2)在第四步,AppWizard 会显示出它将帮助用户创建的类及属性。在这个基于对话框的应用中只有两个类被创建。一个是应用类 CEg3_3App,另一个是对话框类 CEg3_3Dlg。(3)修改对话框资源:在 Textproperties 对话框中,将 Caption 框中的TODO:在这里设置对话控制。”删除,改成为 Hello,WelcometoVisualC+!”。(4)编译、链接、运行,结果如图 2.3:H
19、illaJtoVisailC+!图 2.3 基于对话框的运行结果注意:基于对话框的应用框架和基于文档的应用框架的区别在于实现对话框的第步是创建一个对话框对象 dlg,然后通过调用对话类的成员函数实验三菜单、工具栏与状态栏(一)实验目的:(1)学习如何创建菜单。(1)学习为应用程序创建适合自己的状态条和工具条。(2)学习在工具条中加自己的图形按钮以及如何控制它的外形、 如何来禁止状态条显示正常的菜单提示和键盘状态指示,使得可以把状态条另作它用。(二)实验内容(一):通过创建不同的菜单来显示不同风格的对话框,并该菜单添加加速键,可以通过键盘直接操作。这&.EE3-3取消DoModal()来
20、显示对话框。里的对话框可以使用 MessageBox()函数调用不同的消息框。(三)实验步骤:1 菜单的编辑步骤 1:运行 AppWizard 创建单文档工程 Eg5_1 步骤 2:使用资源编辑器添加菜单资源 2 使用ClassWizard 添加消息处理函数操作步骤:(1).确定打开了 Eg5_1 工作空间 Eg5_1.dsw。(2).选择 View|ClassWizard 菜单项,弹出 MFCClassWizard 对话框。(3).在 Classname 下拉式列表中选择视图类 CEg5_1View,在 ObjectIDs 列表框中选择 ID_MESSAGE_DISPLAY。(4).在 Me
21、ssages 列表框中的 COMMAND 上双击鼠标左键,或者在其上单击左键,然后按AddFunction 按钮,在弹出的 AddMemberFunction 对话框中直接按 OK 按钮。(5).按 EditCode 按钮,或在 Memberfunctions 列表框中双击新添的函数,退出 ClassWizard转入到文本编辑,为该函数添加执行代码。代码如下:voidCEg5_1View:OnMessageDisplay()/TODO:AddyourcommandhandlercodehereMessageBox(这是一个简单的对话框);voidCEg5_1View:OnMessageStyl
22、eOkcancel()/TODO:AddyourcommandhandlercodehereMessageBox(这是一个有确定和取消按钮的对话框,OKCANCEL对话框 ”,MB_OKCANCEL);voidCEg5_1View:OnMessageChange()/TODO:AddyourcommandhandlercodehereMessageBox(这个对话框的标题已经改变了,新对话框);)voidCEg5_1View:OnMessageStyleYesno()(/TODO:AddyourcommandhandlercodehereMessageBox(这是一个有 Yes 和 No 按钮
23、的消息框,YESNO 消息框”,MB_YESNO);)3 加入键盘加速键添加键盘加速键的操作步骤:(1)在工作区中选择 ResourceView 标签,展开 Menu 项,双击 IDR_MAINFRAME修改菜单项的属性。如图 3.1 所示:文件编辑 9消息框帮助i1:V显示)Crtl+DjjuIaIiailiiaHiiiaaiJaaiJ1aLliI!JK4lalillilBIkllllEIilEHUBIlk改变标题(C)利J图 3.1 菜单属性对话框(2)在工作区中单击 ResourceView 标签, 展开 Accelerator 项, 在 IDR_MAINFRAME 上双击左键,启动 A
24、ppStudio 之加速键资源编辑器,客户区中打开一个用于编辑加速键的窗口,如图 3.2 所示:IDKeyIDEDITCOPYCtrl+CVIRTKEYIDFILENEWCtrl+NVIRTKEYIDFILEOPENCtrl+VIRTKEYIDFILEPRINTCtrl+PVIRTKEYIDFILESAVECtrl+SVIRTKEYID_EDTLPASTECtrl+VVIRTKEYID_EDIT_UNDOAlt+VK_BACKVIRTKEYIDEDITCUTShift+VKDELETEVIRTKEYIDNEXTPANEVK_F6VIRTKEYIDPREVPANEShift+VK_F6VIRTK
25、EYID_EDITJCOPYCtrl+VKJNSERTVIRTKEYIDEDITPASTEShift+VKINSERTVIRTKEYIDEDITCUTCtrl+XVIRTKEYID_EDIT_UIMDOCtrl+ZVIRTKEY图 3.2 加速键编辑窗口(3)在最后的虚框上双击鼠标左键,或者单击右键并在弹出的菜单中选择 NewAccelerator 菜单项,弹出如图所示的加速键属性(AccelProperties)对话框,如图 3.3。图 3.3 加速键属性对话框4.编译、链接、运行。(四)实验内容(二)在前面程序的基础上为应用程序创建适合自己的状态条和工具条,在工具条中加自己的图形按钮并控制
26、它的外形、禁止状态条显示正常的菜单提示和键盘状态指示,使得可以把状态条另作它用。(五)实验步骤:1 用 MFC 创建工具栏的一般方法使用 MFC 建立工具栏的基本步骤如下:(1)先使用 VisualC+6.0 工作平台中的资源编辑器中打开资源,打开 Toolbar 中工具条的位图资源,然后根据自己的需要建立和修改工具栏。(2)在程序中建立一个 CToolBar 对象。修改主框架 MainFrm.h 文件,增加工具栏对象数据成员说明classCMainFrm:publicCMDIFrameWndprotected:CToolBarm_wndToolVar;工具栏对象(3)调用 CToolBar
27、类的 Create()成员函数建立窗口的工具栏,该函数同时会将工具栏子窗口与CToolBar 对象连结在一起。(4)调用 CToolBar 类的 LoadBitmap()成员函数装入工具栏命令按钮组的图形位图资源。(5)调用 CToolBar 类的 SetButtons()成员函数设定工具栏中的命令按钮风格, 并赋予每个命令按钮在位图资源中的图形。2 创建菜单项及新的工具栏按钮。11)运行 AppWizard 创建单文档工程 Eg5_2(2)使用资源编辑器添加菜单资源。首先添加一个“画图”菜单项。其 ID 值,标题和提示见表 3.1。表 3.1“画图”菜单资源菜单标题命令 ID提示回图回图(&
28、amp;D)圆圆(&C)ID_DRAW_CIRCLE画一个圆n 圆矩形矩形(&R)ID_DRAW_RECT画一个矩形n 矩形(3)为视图类添加成员变量如下:intm_y;图形中心的 y 坐标intm_x;图形中心的 x 坐标intm_Shape;/设置图形的形状 0:圆 1:矩形并在构造函数中初始化如下:m_Shape=0;圆m_x=0;/x 的坐标为 0m_y=0;/y 的坐标为 0(3)在 OnDraw 函数中添加画图的操作代码如下:rect.right=m_x+50;rect.top=m_y-50;rect.bottom=m_y+50;pDC-Ellipse(&r
29、ect);/矩形设置矩形的大小rect.left=m_x-50;rect.right=m_x+50;rect.top=m_y-30;rect.bottom=m_y+30;pDC-Rectangle(&rect);(4)为菜单项添加对应的消息处理函数。对于“圆”,其 ID 号 ID_DRAW_CIRCLE,使用 ClassWizard 添加命令函数OnDrawCircle(),如图 3.4 所示。if(m_Shape=0)圆rect.left=m_x-50;设置圆的大小else图 3.4ClassWizard 对话框同时使用 ClassWizard 添加更新用户界面的消息函数 OnUpd
30、ateDrawCircle(CCmdUI*pCmdUI);使用同样的方法为 ID 号为 ID_DRAW_RECT 的菜单项“矩形”添加命令函数OnDrawRect()和更新用户界面的消息函数 OnUpdateDrawRect(CCmdUI*pCmdUI)。最后使用ClassWizard 为应用程序添加一个响应鼠标左键按下的消息的函数 OnLButtonDown。为各个函数添加代码如下:voidCEg5_2View:OnDrawCircle()/TODO:Addyourcommandhandlercodeherem_Shape=0;设置为圆voidCEg5_2View:OnUpdateDrawC
31、ircle(CCmdUI*pCmdUI)/TODO:AddyourcommandupdateUIhandlercodehere如果为圆,则将圆按钮压下,在圆菜单前显示一个对钩号if(m_Shape=0)pCmdUI-SetCheck(1);elsepCmdUI-SetCheck(0);)voidCEg5_2View:OnDrawRect()(/TODO:Addyourcommandhandlercodehem_Shape=1;设置为圆)voidCEg5_2View:OnUpdateDrawRect(CCmdUI*pCmdUI)(/TODO:AddyourcommandupdateUIhandl
32、ercodehere如果为矩形,则将矩形按钮压下,在矩形菜单前显示一个对钩号if(m_Shape=1)pCmdUI-SetCheck(1);elsepCmdUI-SetCheck(0);)voidCEg5_2View:OnLButtonDown(UINTnFlags,CPointpoint)(/TODO:Addyourmessagehandlercodehereand/orcalldefault设置 x,y 坐标m_x=point.x;m_y=point.y;更新视图Invalidate();CView:OnLButtonDown(nFlags,point);)(5)在资源浏览器中双击名为 I
33、DR_MAINFRAME 的工具栏,此时工具栏在编辑窗口中打开。首先,使用画圆的工具在最后一个空白按钮上画一个圆,然后在工具栏中双击该按同理创建一个矩形的工具按钮,其 ID 号选才 i 位 ID_DRAW_RECT,与菜单中的矩形菜单项相对应。3 为应用程序添加状态栏为应用程序添加状态栏的基本步骤如下:步骤 1:定位到文件 MainFrm.cpp 文件,添加如下代码:ID_INDICATOR_SCRL,staticUINTindicators=ID_SEPARATOR,ID_SEPARATOR,ID_SEPARATOR,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,/s
34、tatuslineindicator显示 x 坐标信息显示 x 坐标信息钮,弹出其属性对话框,在其 ID 号的选项中选择 ID_EDIT_CLEAR 值,如图 3.5 所示。H甚也剧鼓1口身?图 3.5 按钮编辑及其属性对话框;步骤 2:为状态栏添加标识号。通过菜单 View|ResourceSymbols 打开 ResourceSymbols 对话框,单击 New按钮,添加名为 IDC_STATUSBAR 的标识号,数值取默认值。步骤 3:定位到函数 CMainFrame:OnCreate,在其中添加状态栏的设置代码:intCMainFrame:OnCreate(LPCREATESTRUCT
35、lpCreateStruct)/TODO:Deletethesethreelinesifyoudontwantthetoolbarto/bedockable设置状态信息行的宽度/x 坐标信息窗口m_wndStatusBar.SetPaneInfo(1,IDC_STATUSBAR,SBPS_POPOUT,50);/y 坐标信息窗口m_wndStatusBar.SetPaneInfo(2,IDC_STATUSBAR,SBPS_POPOUT,50);步骤 4:定位到文件 MainFrm.h 中类的定义处,将成员变量 m_wndStatusBar 和m_wndToolBar 的保护类型(protect
36、ed)改为公用类型(public)。步骤 5:通过 ClassWizard 在类 CEg5_2View 中添加 WM_MOUSEMOVE 消息的响应函数(在标识号 ObjectIDs 项中选中 CEg5_2View),并添加代码如下:voidCEg5_2View:OnMouseMove(UINTnFlags,CPointpoint)/TODO:Addyourmessagehandlercodehereand/orcalldefaultcharPositionString50;/获取主框架指针CMainFrame*MFrame=(CMainFrame*)AfxGetMainWnd();/在状态信
37、息行 1 中显示 X 坐标sprintf(PositionString,X:%d,point.x);MFrame-m_wndStatusBar.SetPaneText(1,PositionString);在状态信息行 2 中显示 Y 坐标sprintf(PositionString,Y:%d,point.y);MFrame-m_wndStatusBar.SetPaneText(2,PositionString);CView:OnMouseMove(nFlags,point);)步骤 6:在文件 CEg5_2View.cpp 前部的其他包含语句(#include)后面添加包含语句:#includ
38、eMainFrm.h最后,编译、链接和运行程序。实验四对话框(一)实验目的:1 学习如何创建对话框程序,并想其中添加控件。2 学习如何使用对话框来打开和保存文件。3 学习创建消息对话框。4 学习如何创建和使用属性页对话框。在 Windows 程序中,对话框是最重要的显示信息和取得用户数据的单元;一个应用程序可以拥有几个对话框,这些对话框从用户那里接受特定类型的信息;可以使用资源编辑器创建对话框资源,向其中添加控件,调整对话框的布局,使对话框更加便于使用。(二)实验内容:应用实例创建一个基于对话框的应用程序,并添加文件菜单,用来打开和保存文件;建立消息对话框,用来提醒用户在退出前保存文件;同时建
39、立一个属性页对话框,掌握其基本用法。(三)实验步骤:1 创建一个基于对话框的应用程序。步骤 1.使用 AppWizard 创建一个基于对话框类型的程序 Eg6_1。注意在 AppWizard 的第一页选择Dialogbased步骤 2.AppWizard 创建新项目完成后,在工作区单击 ResourceView 标签来修改程序的资源,双击资源文件夹中的 Dialog,然后双击 IDD_EG6_1_DIALOG 项,打开图 4.1 所示的对话框。这个标准对话框模板中,使用了两种控件,即两个按钮和一个静态文本。图 4.1Dialog 对话框步骤 3.可以设置对话框的属性,右键单击整个对话框的背景,
40、选择Propertie 频在弹出的对话框中修改此对话框 ID 为:IDD_EG6_1_DIAL。G,标题为:对话框示例”。步骤 4.当对话框资源完成以后,选择 View|ClassWizard,打开 ClassWizard,已经有一个类CEg6_1Dlg 与新的对话框相联系。2 建立文件菜单在工程 Eg6_1 中,打开资源编辑器,右键单击背景部分,在弹出的菜单中选择 Insert,在 InsertResources 对话框中选择 Menu,单击 NEW。打开 DialogProperties 对话框,在 Menu 项选择IDR_MENU1,将菜单与对话框资源联系起来。步骤 1.在资源编辑器里选
41、择 IDR_MENU1,建立文件菜单,文件菜单下包括打开和另存为两个子菜单。两个子菜单的属性设置如图 4.2、6.3 所示:Properties步骤 2.为子菜单添加消息响应函数为打开”子菜单添加消息响应函数如下:voidCEg6_1Dlg:OnFileOpen()(CFileDialogdlg(true);/构造文件通用对话框对象dlg.DoModal();打开文件对话框步骤 3.为另存为”子菜单添加消息响应函数如下:voidCEg6_1Dlg:OnFileSaveAs()(CFileDialogdlg(FALSE);/构造文件通用对话框对象dlg.DoModal();打开文件对话框Gene
42、ralExtendiedStylesDFILEOPEN_*jCaption:SeparatorPop-upInadive|打开遇0MtrHOBreak:;:;NoneChecked厂GrayedHelpPrompt:|打开一个现有文档In打开图 4.2 打开”子菜单设置图 4.3 另存为”子菜单设置运行程序,分别选择打开”和另存为”菜单查看结果。3 建立消息对话框消息对话框是最常用最简单的对话框,一般将通过调用函数 MessageBox 弹出的对话框称为消息对话框。MessageBox 函数原型为:intMessageBox(HWNDh/父级窗口的句柄LPCTSTRIpText,/指向信息字符
43、串地址的指针LPCTSTRlpCaptain,/指向消息对话框标题/字符串地址指针UINTuType/消息对话框的风格);下面为 Eg6_1 程序增加消息对话框的功能:步骤 1.为对话框新增一个菜单,标题为其他对话框”,其子菜单为消息对话框”,其属性设置如图 4.4 所示:图 4.4 消息对话框”子菜单设置步骤 2.利用 ClassWizard 为警告”菜单添加消息相应函数,函数名为 OnMenu1(),代码如下:voidCEg6_1Dlg:OnWarning()/TODO:AddyourcommandhandlercodehereMessageBox(未保存文件,要退出吗告”,MB_ICON
44、WARNING+MB_YESNO+MB_DEFBUTTON2);)步骤 3.运行程序,选择消息对话框”子菜单,查看运行结果。4 创建属性对话框属性页对话框将多个对话框集中起来,通过标签或按钮来激活各个页面,主要分为一般属性页对话框和向导对话框两类。在一般属性页对话框中,页面的切换通过点击不同的标签实现;在向导对话框中,页面的选择是通过点击上一页“、下一页”等按钮实现的。与属性页对话框相关的类主要包括 CPropertySheet 类和 CPropertyPage 类。CPropertySheet类是 CWnd 的一个派生类,其对象作为属性页对话框的窗口框架出现,主要实现管理各个属性页面的作用。
45、CPropertySheet 类的重要成员函数:VoidAddPage(CpropertyPage*pPage):该函数用于向属性框中增加属性页。intDoModal():用于显示一个模态属性页,对于一般属性页,返回值为IDOK、IDCANCEL 或者 0。为 Eg6_1 程序增加消息对话框的功能:步骤 1.首先为菜单其他对话框”增加子菜单属性页对话框”。步骤 2.打开资源面板,选才 DDialog 条目,单击右键,在弹出的菜单中选择 InsertDialog,新建两个对话框资源;步骤 3.将新建的对话框标题该为第一页”和第二页”,并将样式改为“下层”;步骤 4.为新建的对话框资源添加其相对应
46、的类,类名分别为“Dlg:Dlg1”选择父类为 CPopertyPage(不要选择默认的 CDialog 类);步骤 5.利用 ClassWizard 为属性页对话框”菜单添加消息相应函数, 函数名 OnMenu2(),为其添加代码如下:voidCEg6_1Dlg:OnMenu2()/TODO:AddyourcommandhandlercodehereCPropertySheetm_sheet(属性页对话框工CDlg1page2;CDlgpagel;m_sheet.AddPage(&page1);m_sheet.AddPage(&page2);m_sheet.DoModal()
47、;)实验五常用控件应用(一)实验目的:1 .学习和掌握基本控件及其使用方法。2 .学习各种基本控件和相关函数的建立与调用。(二)实验内容:设计一个如图 5.1 所示的用户调查表图,并使用一个静态文本控件用来显示该用户的所有信息,本例子主要用来说明对话框和控件的使用。图 5.1 用户调查表(三)实验步骤:1 .创建工程:步骤 1.在 VC+集成开发环境中,通过菜单 File|New,弹出 New 对话框;步骤 2.在 Projects标签中选择 MFCAppWizard(exe),在 Projectname中输入“Eg7_1”,Location读者可以自己选择;步骤 3.按下 OK 按钮,在弹出
48、的 MFCAppWizardStep-1 对话框中选择程序框架为单文档框架,即选中 SingleDocument;步骤 4.按下 OK 按钮,在弹出的 NewProjectInformation 对话框中按下 OK 按钮后等待创建完相应的工程。2.创建对话框资源在工作区中选中 ResourseView 标签展开 Eg7_1Resourse|Dialog 条目,可以察看当前工程中的对话框资源;选才 IDialog 条目,单击鼠标右键,弹出活动菜单,选择菜单 InsertDialog 命令;将鼠标移动到对话框资源上,单击鼠标右键,在弹出的菜单中选择Properties 菜单命令,将对话框的标题设置
49、为用户调查表”标识号不变。删除对话框资源本来就有的静态控件,利用鼠标将按钮 OK 和 CANCEL移动到对话框的底部,将按钮的标题分别改为确定,取消。在工具栏中的静态控件上单击一下鼠标左键,然后在对话框资源中按下鼠标左键拖动,出现一个矩形框,松开鼠标左键,则在对话框资源中出现一个静态控件,将该静态控件的标题改为姓名”其标识号改为 IDC_STATIC_NAME。按照上面的方法在对话框资源上加入其它的控件,它们的类型、标题和标识号如下表7.1:表 7.1 对话框资源中各控件属性控件类型控件类型置置规规 D)标标墨其高属性其高属性ID0K确定确定默认属性默认属性IDCANCEL取消取消静态控件静态
50、控件IDC_STATICNAME姓名姓名IDC_STATIC_SEX性利性利EJMm地址地址IDC_STATICJROVINCE省份省份IDCSTATIC_CITY城市城市IDC.STATICHOBBY兴趣兴趣IDCSTATIC_EDIT您要说的话编辑框控件编辑框控件IDC_EDIT_NAMEIDC_EDIT_EMAIL3 生成对话框类资源创建完毕以后,还需要创建一个与对话框资源相关联的类,这个类需要从对话框类派生,然后定义一个派生类的对象,通过派生类的对象使对话框的功能得以实现。生成对话框类的操作步骤:在对话框资源上单击右键,在弹出的菜单中选择 ClassWiizard,在 MFCClass
51、WIizard 对话框弹出以后紧接着弹出 AddingClass。在打开对话框的过程中,如果系统监测到有新建的对话框资源,菜单资源等,并且该资源没有与之相关联的类,就会弹出对话框,询问是否创建新的类。在 AddingClass 对话框中确认默认选择 Createanewclass,单击按钮弹出NewClass 对话框,在编辑框中输入新建类的名称 CEg7_1Dialog,其他设置取默认值。单击 OK 按钮后显示出 MFCClassWIizard 对话框。4 为控件建立相关联的成员变量在 MFCClassWiizard 对话框中默认的 Projects 和 Classname 项为 Eg7-1
52、和CEg7-1Dialog。选中 MemberVariables 标签中的 ControlIds 项中的 IDC_EDIT_NAME 条目, 单击AddVariables 按钮,将弹出 AddVariables 对话框。在 AddVariables 对话框中添加成员变量 m_Name,与编辑控件 IDC_EDIT_NAME相关联,类型为 CString,catogory 为 Value。单击 OK 按钮,添加变量完成。AddVariables 对话框,如图 5.2:图 5.2AddVariables 对话框按照上述方法为其它控件添加相关联的变量,如表 7.2 所示:表 7.2 控件与其相关联的
53、变量对应表髓IDCatDMTjpeIDCJDITNAMEValncCstagmJNameIDC_ED1T_EMAILVdu:CstmgIDCJD1T典VducCstmgm_EitIDC_COMBO1CantdCComboBoxmjroviiiceIDC.COMBOlContiQlCCcn岫占ni_City5 成员变量的初始化OnInitDialog()函数。OnInitDialog 是一个虚函数,它在对话框显示之前被调用,用户可以通过重载该函数对对话框中的各种控件进行初始化。成员变量的初始化需要重载对话框类的操作如下:打开MFCClassWizzard,选中标签MemberMap标签中的Con
54、trolIDs项中的IDC_COMBO1条目,在 Messages 里面选择 WM_INITDIALOG,单击 AddFuction 按钮,然后单击 EditCode 按钮,进入源程序,编辑 OnInitDialog()函数。增加以后的代码如下:BOOLCInvest:OnInitDialog()CDialog:OnInitDialog();/TODO:Addextrainitializationherem_Province.AddString(湖南)m_Province.AddString(河南)returnTRUE;/returnTRUEunlessyousetthefocustoacon
55、trol6 建立消息映射与响应函数需要在用户选择了省份以后更新有关城市的信息,这就需要在组合框中增加消息响应函数,功能是当用户打开第二个组合框的下拉式列表框的时候及时更新相关省份的城市信息。操作步骤:打开 MFCClassWizard,选中标签 MemberMap 标签中的 ControlIDs 项中的 IDC_COMBO2条目,在 Messages 里面选择 CBN_DROPDOWN,单击“AddFuction 按钮,接受系统默认的函数名,然后单击“EditCode 按钮,进入源程序,编辑函数如下:响应函数voidCEg7_1Dlg:OnDropdownCombo2()/TODO:Addyo
56、urcontrolnotificationhandlercodehereCStringm_1;m_Province.GetWindowText(m_1);if(m_1=河南)(m_City.ResetContent();m_City.AddString(关 B 州);m_City.AddString(洛阳);if(m_1=湖南)(m_City.ResetContent();m_City.AddString(长沙);m_City.AddString(岳阳);7 函数建立与调用在 Workspace 工作区打开 CLassView,选中要加入函数的类 CEg7_1Dlg,点击鼠标右键,在弹出的对话
57、框中选择AddMemberFuntion。在 FuntionType(函数类型)中填入 CString,表示函数类型是字符串对象;在FuntionDeclareation(函数声明)中填入 GetRadio。该函数用来获得单选按钮的信息。然后在 CEg7_1Dlg.cpp 文件中找到该函数,添加函数代码如下:CStringCEg7_1Dlg:GetRadio()(CStringRadiotext;UINTm_6=GetCheckedRadioButton(IDC_RADIO1,IDC_RADIO2);if(m_6=IDC_RADIO1)(Radiotext=男;elseRadiotext=女;
58、return(Radiotext);)说明:CWnd 的成员函数:GetCheckedRadioButton()返回指定组中的第一个所选中的单选钮的ID,如果没有按钮选中则返回 0。该成员函数的原型:intGetCheckedRadioButton(intnIDFirstButton,intnIDLastButton);其中,第一个参数是 nIDFirstButton 同一组中的第一个单选按钮的 ID,nIDLastButton是同一组中最后一个单选按钮的 ID。建立第二个成员函数:同样为 CEg7_1Dlg 类加入另一个成员函数 GetCheck()以获得复选框的信息。在FuntionTyp
59、e(函数类型)中填入 CString,表示函数类型是字符串对象;在FuntionDeclareation(函数声明)中填入 GetCheck。在 CEg7_1Dlg.cpp 文件中找到该函数,添加函数代码如下:函数代码:CStringCEg7_1Dlg:GetCheck()intm=0;CStringstr,Checktext;for(inti=IDC_CHECK1;iGetCheck();if(m=1)CWnd:GetDlgItemText(i,str);str+=;Checktext+=str;)return(Checktext);重载 OnOK()函数:该例将在 OnOK()函数中调用这
60、两个成员函数。打开对话框资源,双击确定”按钮,接受系统默认的函数名,重载 OnOK()函数:voidCMy21Dlg:OnOK()(/TODO:AddextravalidationhereCStringm_1,m_2,m_3,str;m_3=GetRadio();调用成员函数以得到单选按钮的信息str=GetCheck();调用成员函数以得到复选框中的信息)8 重载其他函数重载以后的 OnOK()函数源代码如下:voidCMy21Dlg:OnOK()(/TODO:AddextravalidationhereUpdateData(TRUE);/将对话框控件中的内容传给其成员变量CStringm_1,m_2,m_3,str;m_3=GetRadio();str=GetCheck();m_Province.GetWindowText(
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025官方版短期贷款外汇借款合同范本
- 2025份个人赠与合同书样本
- 期末教学设计-2025-2026学年中职基础课-基础模块 下册-人教版(2021)-(数学)-51
- 品牌特许经营合同样本
- 专家职称面试题库及答案
- 2025企业用车、出租车租赁合同
- 企业职工劳动合同书
- 2025上海市特价房购买合同
- 中医选岗面试题库及答案
- DB65T 3764-2015 有机产品 日光温室豇豆生产技术规程
- 幼儿园获奖公开课:中班语言活动《哈哈镜》课件
- 2025年中外合资企业合作框架协议模板
- 《餐饮点菜》课件
- 公司财务知到智慧树章节测试课后答案2024年秋北京第二外国语学院
- 2025年天马微电子股份有限公司招聘笔试参考题库含答案解析
- 2025年浙江事业单位联考真题解析历年高频重点提升(共500题)附带答案详解
- 防止人身伤亡事故培训课件(共139张)
- 宣传物料技术服务方案设计
- 检验科质量管理手册
- 幼儿园讲解海军知识
- 《中国货币发展史》课件
评论
0/150
提交评论