VisualC实验指导书.doc_第1页
VisualC实验指导书.doc_第2页
VisualC实验指导书.doc_第3页
VisualC实验指导书.doc_第4页
VisualC实验指导书.doc_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一 熟悉Visual C+集成开发环境一. 实验目的(1) 熟悉VC+编程环境(2) 了解OOP编程模式(3)了解程序调试的基本方法二. 重点和难点介绍(1) VC+集成开发环境VC+是程序员及软件爱好者梦寐以求掌握的工具,它内嵌了微软基础类库MFC-微软程序员几十年精髓积累,在这些上百万行C+优化代码的支持下,它将Windows应用程序的可视化设计、C+源程序代码及Windows资源的输入、编辑、编译、调试链接集为一体,是微软公司推出的Windows平台下优秀的软件开发工具之一。它由主菜单、工具栏、控件工具箱及完成各种特定功能的窗口组成。其界面如图1-1所示:菜单工具栏类 视 图资源视图文件视图切换窗口调试工具栏代码编辑窗口编译调试窗口图1-1 VC+集成开发环境(2) 创建Windows应用程序为了有效地开发Windows应用程序,必须熟悉VC+编程环境。软件设计的一般规律是:根据用户需求定义软件功能模块,从中提取并定义用户数据结构,接着设计程序外观即界面设计,最后编写不同部件的程序代码,对程序进行动态调试,最终生成Windows环境下的可执行程序。(3)程序调试方法:提高调试程序效率无疑是学习编程的最佳途径之一。(4) Visual C+的帮助功能VC+6.0是Visual Studio 6的套件之一,它本身并不带帮助,微软公司为Visual Studio 6提供了一套MSDN Library帮助系统。MSDN(Microsoft Developer Network)是使用Microsoft开发工具或是以Windows或Internet为开发平台的开发人员的基本参考,它是一本集程序设计指南、用户使用手册以及库函数于一体的电子词典,使用MSDN Library的帮助功能,不仅可以引导初学者入门,还可帮助各种层次的用户完成应用程序的设计。三、 实验示例示例一 创建基于工作台的应用程序Exam1(1) Win32 Console Application类型的应用程序如图1-2所示:图1-2 选择应用程序类型对话框(2) 创建基于Win32 Console project的“空工程”Exam1,如图1-3所示:图1-3 Win32 Console Application(3)添加C+源程序文件具体操作:“文件”-“新建”-选中“C+ Source File” -向文件名框中输入“Exam”(当前工程同名)-选中“添加工程”复选框按钮,单击“确定”,如图1-4所示:图1-4 创建.cpp源程序文件向代码窗口输入下列代码,计算n!,保存到名为Exam1.cpp的文件中:#include const int N=10;double fact(int);void main()double t;t=fact(N);coutfact result=tendl;double fact(int m)double p=1;for(int i=1;i=m;i+)p *=i;return p; 按CTRL+F5,编译并运用上述程序,结果如下:fact result=3.6288e+006注意观察工作空间中文件视图(FileView)的变化。实际上,VC+应用程序结构是这样安排的,它会将一个完整的源程序分为C+头文件(.h)和实现文件(.cpp)。头文件包含全局常量定义及函数原型声明等,而.cpp文件中包含的是函数定义的实现部分。如果对上述程序做出修改,有下面操作: (4)向当前工程中添加头文件Exam1.h,如图1-5所示:图1-5 创建.h文件将Exam1.cpp文件中的前三条语句剪切到Exam1.h中,得到如图1-6的结果图1-6Exam1.h文件内容打开Exam1.cpp文件,在该程序首部添加下列语句:#include Exam1.h 。编译并运行该程序,得到结果:fact result=3.6288e+006小结: VC+程序结构将全局常量定义及函数原型声明等书写在头文件中,实现文件书写函数定义的实现部分。示例二:类与对象面向对象程序设计的基本特征是数据封装、代码继承与方法多态。本示例定义了学生类student数据,实现了学生信息的封装,主函数中定义学生对象数组组织数据,实现了简单的学生信息管理。具体操作步骤如下:(1) 创建了Win32 Console project的“空工程”Exam2。(2) 向当前工程中添加头文件Exam2.h(3) 向头文件中输入代码如下:#include #include class studentprivate:char classes32; /班级char name32;/姓名int score1,score2,score3;/三门课成绩public:student();/确省的构造函数student(char*,char*,int,int,int);/重载的构造函数student();/析构函数char* get_name();/得到学生姓名void display();/显示输出;说明:学生类中包含5个私有的数据成员,用于定义学生类的基本信息,同时声明两个重载的构造函数及一个析构函数原型,用于学生数据的初始化,定义display函数用于学生信息的输出。(4) 向当前工程中添加文件Exam2.cpp(5) 向该文件中输入源程序如下:#include Exam2.hstudent:student() student:student(char* c,char* n,int s1,int s2,int s3)strcpy(classes,c);strcpy(name,n);score1=s1; score2=s2; score3=s3;student:student() char* student:get_name()return name;void student:display()coutclasses:classesendl;coutname:nameendl;coutscore1:score1endl;coutscore2:score2endl;coutscore3:score3endl;void main()student xk0613;char bj32,n32;int s11,s22,s33;for(int i=0;i3;i+)coutplease enter classes,name,score1,score2,score3:bjns11s22s33;xk061i=student(bj,n,s11,s22,s33);for(i=0;i3;i+)xk061i.display();coutplease enter seek name:n;for(i=0;i3;i+)if(strcmp(xk061i.get_name(),n)=0)break;if(i3)xk061i.display();elsecoutNo found!;注意:类成员函数在实现文件的书写方法,例如:void student:display().; 说明成员函数display()归属于类student,或者说display()定义在类student中。运行上述程序,解释运行结果。示例三:代码继承使用示例二相同的方法创建了Win32 Console project的“空工程”Exam3。(1) 向当前工程中添加Exam3.cpp文件。向该文件中输入如下代码,首先定义point类,其中包含两个数据成员表示点point坐标,接着定义line类,它派生自point类。两点定一线段,其中的一个点来自point,另外一个点自己解决。#include #include class pointprotected:int x1,y1;public:point(int a, int b)x1=a; y1=b;class line:public point private:int x2,y2;public:line(int a1,int b1,int a2,int b2):point(a1,b1)x2=a2; y2=b2;double length()return sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);void main()line l1(1,1,2,2);coutl1.length()endl;程序运行结果:1.41421说明:基类point包含了表示两个整型数据成员表示point几何信息,派生类line继承了基类point全部成员,并添加两个成员,两点构成线段,计算线段长度。注意:下面的操作将类声明放在头文件Exam31.h中,将两个类的成员实现部分写在实现文件Exam31.cpp中。Exam3.cpp中仅保留主函数。(2) 向当前工程中添加Exam31.h,并将point类声明及line类声明由Exam3.cpp剪切到头文件Exam31.h中,程序如下所示:class pointprotected:int x1,y1;public:point(int a, int b);class line:public pointprivate:int x2,y2;public:line(int a1,int b1,int a2,int b2);double length();(3) 向当前工程中添加文件Exam31.cpp,向该文件中输入源程序如下:#include exam31.h#include math.hpoint:point(int a,int b)x1=a; y1=b; line:line(int a1,int b1,int a2,int b2):point(a1,b1)x2=a2; y2=b2; double line:length()return sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);Exam3.cpp文件中程序如下:#include #include Exam31.hvoid main()line l1(1.0,1.0,2.0,2.0);coutl1.length()endl;程序运行结果:1.41421示例四:多态性(1)添加新类在示例三的基础上添加一个新类circle,该类的声明部分写在Exam31.h中,代码如下:class circle:public linepublic:circle(int,int,int,int);double area();接着在point类和line类中各添加一个计算面积的成员函数area(),代码如下:class pointprotected:double x1,y1;public:point(double a, double b);virtual double area()=0; /虚函数;class line:public pointprivate:double x2,y2;public:line(double,double,double,double);double length();double area();(2)向Exam31.cpp中添加代码如下:#include exam31.hpoint:point(double a,double b)x1=a; y1=b;line:line(double a1,double b1,double a2,double b2):point(a1,b1)x2=a2; y2=b2;double line:length()return sqrt(x1-x2)*(x1-x2)+(y1-y2)*(y1-y2);double line:area()return 0.0;circle:circle(int a1,int b1,int a2,int b2):line(a1,b1,a2,b2)double circle:area()return 3.14*length()*length(); (3)在Exam3.cpp中 输入代码如下:#include #include Exam31.hvoid main()point* p1;line l1(1.0,1.0,2.0,2.0);p1=&l1;cout线段的面积=area()endl;circle c1(1,1,2,2);p1=&c1;cout圆面积=area()“新建”-“工程”选项卡- “MFC AppWizard” 应用程序类型-输入工程文件名“Exam4”-选择适当的存盘“位置”,如图2-1所示:图2-1 “新建”工程对话框(3)使用AppWizard可选择三种不同类型的应用程序,如图2-2所示:图2-2 创建“对话框”应用程序选择“基本对话框”应用程序类型及支持“中文”语言资源,连续四步按“下一步”按钮,按“缺省对话框”应用程序类型设置,得到缺省的对话框应用程序。删除对话框面板IDD_EXAM4_DIALOG缺省设置,向资源面板界面中画两个命令按钮Button1,Button2,界面设计如图2-3所示。注意:如果没有出现工具栏,则由“工具”菜单/”定制”/工具栏选中Control项。 图2-3 对话框应用程序界面鼠标选中Button1,用Ctrl+W打开类向导ClassWizard,为响应鼠标单击Button1消息添加消息成员函数OnButton1()。具体操作方法为:在Object IDs框中选中IDC_BUTTON1(按钮Button1的控件标识符),在Message框中选中BN_CLICKED项(鼠标单击)并双击,弹出添加消息函数对话框,如图2-4 所示,向应用程序框架中自动添加响应鼠标单击按钮Button1的成员函数。void CExam4Dlg:OnButton1() /表示该函数定义(归属于)CExam4Dlg类。/ TODO: Add your control notification handler code here 图2-4 添加响应鼠标单击消息的成员函数OnButton1向该函数中添加MessageBox(“Ok Visual C+!”)语句,当鼠标单击该按钮时,弹出消息框,显示Ok Visual C+!字符。接着用同样方法向按钮Button2中添加OnOK()函数,当鼠标单击该按钮时,结束程序。(4)编译程序按F7编译链接并创建Windows下可执行程序Exam4.exe,编译链接信息如下所示:Compiling resources.Compiling.StdAfx.cppCompiling.Exam4.cppExam4Dlg.cppGenerating Code.Linking.Exam4.exe - 0 error(s), 0 warning(s)从上面信息可看到,VC+编译器先对源程序进行全面扫描,检查是否有语法及语句结构方面的错误。如果有误,则立即提示出错信息,待改正后再次编译才能构成可执行程序Exam4.exe。(5)运行程序按功能键F5运行该程序,得到图-3所示效果。接着使用资源管理器打开当前工程“Exam4”指定路径下的文件夹Debug,可看到应用程序Exam4.exe,用鼠标直接双击该程序会得到如图2-3的效果。(6)退出VC+集成环境(7)运行应用程序Exam4进入VC+集成环境-“文件”-“打开”;在“文件打开”对话框中选择“文件类型”为所有文件(*.*);选择Exam4.dsw(VC+工程文件),按“打开”按钮,即打开刚创建的Exam4的全部应用程序。如图2-5所示:图2-5 打开应用程序单击按钮运行当前应用程序,得到如图-3所示效果。说明:利用应用程序向导AppWizard可创建基于MFC的Windows应用程序框架,其中包含工作空间工程文件*.dsw;C+源代码文件.cpp;C+头文件*.h;预编译头文件StdAfx.h和Windows资源文件*.rc;*.ico等。这些不同性质的文件组成在一起,构成VC+应用程序基本结构。在此基础上,继续添加自己的代码和资源,以实现用户软件需求。常用控件的使用控件作为用户界面设计基本元素,其使用规律是:首先向界面中添加必要的控件,接着修改其控件属性,以适合界面设计外观及形态的要求。接着为控件添加响应用户消息的成员函数,在该函数中添加该动作要实现的代码。这里主要用到了与控件操作相关的工具:控件属性对话框(Property Dialog)和类向导对话框(ClassWizard Dialog)。示例二:文本框在示例Exam4的基础上添加两个命令按钮,一个文本框。一个按钮用于获取文本框输入的信息,另外一个按钮将信息显示在文本框中,属性设置如表2-1所示:表2-1 控件属性表控件名ID标识符标题外观风格显示/不显示可用/不可用对话框IDD_EXAM4_Dialog1文本框示例显示可用文本框IDC_EDIT1空左对齐垂滚动显示可用按钮IDC_BUTTON1获取数据显示可用按钮IDC_BUTTON2输出数据显示可用界面设计如图2-6所示: 图2-6 文本框示例 图2-7 添加成员变量属性说明:属性显示/不显示确定了该控件运行是否可见,缺省为选中可见。属性可用/不可用确定了该控件在运行时是否可用,缺省为可用。要使文本框在程序运行中起到数据输入/输出的作用,必须为文本框在程序中创建一个内存变量,为文本框缓存数据。具体操作为:选中文本框,Ctrl+W打开ClassWizard,如图2-7所示,选择Member Variable选项卡,鼠标双击IDC_EDIT1,弹出添加成员变量对话框,为该文本框添加CEdit类型的成员变量m_Edit1。此时程序中添加了如下代码:enum IDD = IDD_EXAM4_DIALOG ;CEditm_Edit1;说明:使用ClassWizard为标识符为IDD_EXAM4_DIALOG的文本框添加了CEdit类变量m_Edit1,用于获取并存储界面数据。有两种方法添加鼠标单击按钮的消息成员函数,第一种是直接用鼠标双击“获取数据”按钮,弹出添加成员函数对话框,系统为鼠标单击按钮消息的缺省函数OnButton1。第二种方法是选中“输出数据”按钮,Ctrl+W弹出类向导对话框,添加消息成员函数OnButton2,效果相同。此时程序中有了三处变化:在ExamDialog1.h中:afx_msg void OnButton1();/响应消息的成员函数afx_msg void OnButton2();/响应消息的成员函数在ExamDialog1.cpp中:void CExam4Dlg:OnButton1() /说明该成员函数归属于类CExam4Dlg void CExam4Dlg:OnButton2() 及消息映射宏:BEGIN_MESSAGE_MAP(CExam4Dlg, CDialog)/AFX_MSG_MAP(CExam4Dlg)ON_BN_CLICKED(IDC_BUTTON1, OnButton1)ON_BN_CLICKED(IDC_BUTTON2, OnButton2)/AFX_MSG_MAPEND_MESSAGE_MAP()消息映射宏项ON_BN_CLICKED说明当用户鼠标单击按钮IDC_BUTTON1时,由成员函数OnButton1来响应它。为OnButton1函数添加代码如下:CString temp;/定义CString字符串型变量tempm_Edit1.GetWindowText(temp); /获取文本框中输入的数据,保存在temp中MessageBox(temp);/将数据显示在消息框中为OnButton2函数添加代码如下:m_Edit1.SetWindowText(Visual C+!);单击“输出数据”按钮,得到如图2-8所示结果:图2-8 文本框示例运行结果注意:与控件相关函数可使用MSDN联机文档求得帮助,经常使用自然就熟悉了。示例三:单选按钮、复选框控件(1) 添加新对话框资源具体方法是:打开Exam4工程,CTRL+R,“插入资源”,选中Dialog项“新建”,向当前工程中添加ID标识符为“IDD_DIALOG1”的对话框资源。(2)添加新类为了使对话框资源可编程,为对话框资源IDD_DIALOG1添加新类。具体操作是:选中IDD_DIALOG1,Ctrl+W,弹出“添加新类”对话框,如图2-9所示。图2-9 添加新类对话框在”Name”框中输入类名称”CDialog1”,缺省基类为CDialog。这样在程序中添加代码如下:(3)改变缺省启动顺序在应用类CExam4App的成员函数BOOL CExam4App:InitInstance()中做如下修改:/CExam4Dlg dlg;CDialog1 dlg;并在Exam4.cpp文件首部添加:#include Dialog1.h,运行程序,得到结果如上图-8所示。说明:函数InitInstance()就是VC+程序动态执行的起始位置。通过上面的操作,把新添加的对话框资源作为启动窗体调用。(4) 添加控件向对话框资源IDD_DIALOG1中添加七个控件,一个文本框,两个单选按钮及两个复选框及两个组框,其界面设计如图2-10所示:图2-10 单选按钮对话框(5) 设置属性如表2-2 所示:表2-2 控件属性控件名ID标识符标题外观风格文本框IDC_EDIT1组框IDC_STATIC性别单选按钮IDC_RADIO1男单选按钮IDC_RADIO2女组框IDC_STATIC爱好复选框IDC_CHECK1打球复选框IDC_CHECK2游泳(6)添加代码为单选按钮IDC_RADIO1及IDC_RADIO2添加响应鼠标单击的成员函数OnRadio1及OnRadio2,并OnRadio1中添加代码如下:CString temp;/定义CString型变量tempGetDlgItem(IDC_RADIO1)-GetWindowText(temp);/获取单选按钮标题m_Edit1.SetWindowText(temp);/将标题放置到文本框输出说明:这里用到了一个非常有用的API函数GetDlgItem,其作用是获取指定ID标识符的控件指针。照此办理,向OnRadio2函数中添加代码,运行效果如图2-11所示:图2-11 选择性别为“男”向Dialog1.h的CDialog1类定义中添加public型变量:CString t;并为两个复选框添加消息函数,并输入代码如下:void CDialog1:OnCheck1() CString temp;GetDlgItem(IDC_CHECK1)-GetWindowText(temp);temp=temp+t;/字符串连接m_Edit1.SetWindowText(temp);t=temp;void CDialog1:OnCheck2() CString temp;GetDlgItem(IDC_CHECK2)-GetWindowText(temp);temp = temp + t;m_Edit1.SetWindowText(temp);t=temp;程序运行结果如图2-12所示:图2-12 复选框选择结果结论:单选按钮实现多选一功能,而复选框实现了多选多功能。为文本框IDC_EDIT1定义文本框类型变量m_Edit1,可在程序运行中实现对该控件特征行为的改变。示例四:列表框和组合框控件(1) 如示例三 首先向当前工程添加新对话框资源IDD_DIALOG2;(2) 为对话框资源IDD_DIALOG2添加新类CDialog2;(3) 在对话资源中添加若干控件,如图2-13所示:图2-13 列表框和组合框控件界面设计(4) 设置属性如表2-3所示表 2-3控件名称ID标识符标题数据文本框IDC_EDIT1组合框IDC_COMBO1如图 所示列表框IDC_LIST1按钮IDC_BUTTON1添加数据项按钮IDC_BUTTON2删除数据项按钮IDC_BUTTON3转移数据项(5)将IDD_DIALOG2设为启动对话框应用类CExam4App成员函数BOOL CExam4App:InitInstance()中作如下修改:/CExam4Dlg dlg; /CDialog1 dlg; CDialog2 dlg;并在Exam4.cpp文件首部添加:#include Dialog2.h运行程序,得到结果如图2-14所示:图2-14列表框和组合框控件(6)为文本框、组合框和列表框添加变量如图2-15所示:图2-15 添加成员变量(7) 为按钮添加消息成员函数void CDialog2:OnButton1() /将文本框输入的信息添加到列表框中CString temp;m_Edit1.GetWindowText(temp);m_List1.AddString(temp);void CDialog2:OnButton2() /删除组合框选中的数据项int Index= m_Combo1.GetCurSel();if(Index=-1)MessageBox(没有选中数据项!);elsem_Combo1.DeleteString(Index);四. 实验内容(1) 如果为示例二的文本框添加CString类的变量m_Edit1,如何使用该变量获取数据?(2) 改进示例三,使选中“爱好”复选框时将该选项填入文本框,当取消复选框选项时,无此操作。提示:为复选框添加CButton类变量(m_Check1),在OnCheck1函数中,使用m_Check1. GetCheck()函数对当前状态进行检查,如果为1,认为选中。(3)完善示例四,为“数据转移”按钮添加代码,将组合框选中的数据项转移到列表框中。(4)如何将一幅位图图片显示在图片控件中。五. 思考题(1)应用程序向导创建的程序框架(对话框)都包含那些类,它们的主要作用?(2)类向导在编程中所起的作用?(3)VC+程序中头文件和实现文件之间存在什么关系?实验三 菜单、工具栏与对话框应用一. 实验目的(1)了解单文档应用程序结构及其特征(2)掌握菜单和工具栏的使用方法(3)掌握模态对话框与非模态对话框的编程方法二. 重点和难点介绍(1)单文档应用程序是非常重要的应用形式,它是由主框架类、应用类、文档类和视图类构成。文档类用于组织用户数据,视图类用于接受用户消息,与界面数据交互。应用类与操作系统打交道,将应用代码初始化为操作系统接受的进程,而主框架类将文档类视图类与应用类组装在一起,形成一个窗体外观。(2)菜单和工具栏是单文档应用程序基本的界面设计,是人机交互重要接口之一。(3)非模态对话框类似于Word中的查找/替换对话框,当它被调用时,不影响其它程序的执行,在查找字符的同时仍可编辑Word中的文档。而模态对话框被调用后,其它部分的程序只能等待该对话框操作完毕之后才能获得执行的机会。三. 实验示例示例一: 创建单文档应用程序创建单文档应用程序Exam5如图3-1所示。图3-1 单文档应用程序以下的6步按缺省进行,最后得到如图3-2结果。图3-2 单文档应用程序结构概要说明由应用程序向导AppWizard所创建的单文档应用程序Exam5的4个类,特别注意这四个类的基类及该类的头文件和实现文件名称。视图类CExam5View的基类是CView,应用类CExam5App的基类是CWinApp,主框架类CMainFrame的基类是CFrameWnd,而文档类CExam5Doc的基类是CDocument。各类都是由一个头文件和一个实现文件构成,比如主框架类就是由MainFrame.h和MainFrame.cpp所构成。运行该程序,得到如图3-3所示图3-3 程序运行结果思考题:查看工作空间的类视图ClassView与文件视图FileView,与图3-4做一比较,对该程序结构做出分析。注意在类视图的Globals结构中包含一个全局对象theApp,鼠标双击它立即在右侧代码窗口中查看到下列语句:CExam5App theApp;该语句创建了本应用程序类对象theApp,该对象初始化本应用进程,是本程序唯一入口点。 图3-4 工作空间视图因而工作空间的三个视图是编辑修改程序的好帮手,也是初学者了解程序基本结构的基本工具,应该熟练掌握。示例二: 使用缺省菜单(1) 打开缺省菜单打开示例一的单文档应用程序Exam5,选中工作空间中的资源视图ResouceView,我们看到图3-4 所示,在VC+应用中,把加速键、对话框、图标、菜单、工具栏与字符串都视为Windows的资源。打开Menu,在右侧窗口可看到缺省的菜单资源IDR_MAINFRAME。(2) 添加新菜单项为“查看”菜单添加“调用模态对话框”菜单项,设置该菜单项的ID标识符为IDD_Dialog1。如图3-5所示:图3-5 设置菜单项属性(3)添加对话框资源IDD_Dialog2Ctrl+R,向当前工程中添加资源,选择Dialog,如图3-6所示:图3-6 添加对话框资源(4)为对话框资源IDD_Dialog2配置新类鼠标选中IDD_Dialog2,Ctrl+W,打开类项导ClassWizard,系统自动弹出为该资源配置新类的对话框,如图3-7所示:图3-7 为对话框资源配置代码将新类命名为“CMyDialog”,基类为CDialog,如图3-8所示:图3-8 创建新类对话框(5)为“调用模态对话框”菜单项添加响应鼠标单击的消息函数选中“调用模态对话框”,按Ctrl+W,打开类向导,选中“Message”框中的”Command”项,表示添加响应IDD_Dialog1菜单项消息的成员函数为OnDialog1,如图3-9所示:图3-9 创建消息函数在主框架类中自动添加了消息成员函数OnDialog1。显然这里就是添加响应该菜单命令的代码,添加代码如下:void CMainFrame:OnDialog1() CMyDialog Dlg;Dlg.DoModal();并向主框架类实现文件首部添加预编译包含语句:#include “MyDialog.h”编译运行,鼠标选择“调用模态对话框”菜单项,得到如图3-10所示:图3-10 程序运行结果示例三: 用户自定义菜单(1) 向当前工程中添加菜单资源Ctrl+R,选择Menu,如图3-11所示,添加新菜资源单IDR_MENU1。图3-11 添加新菜单资源对话框 为新菜单IDR_MENU1添加“结束”菜单项(ID标识符为ID_APP_EXIT),如图3-12所示:图3-12 设置菜单属性(2)为“结束”菜单项添加消息函数选中IDR_MENU1菜单资源,Ctrl+W,为菜单资源IDR_MENU1选择主框架类CFrameWnd, 为“结束”菜单项添加消息函数OnAppExit,如图3-13所示:图3-13 创建消息函数在该函数中添加代码如下:void CMainFrame:OnAppExit() PostQuitMessage(-1);/向系统发出结束消息(3)重新组装窗口将应用类的初始化函数做如下修改:CExam5App: InitInstance() .pDocTemplate = new CSingleDocTemplate(IDR_MAINFRAME,RUNTIME_CLASS(CExam5Doc),RUNTIME_CLASS(CMainFrame), / main SDI frame windowRUNTIME_CLASS(CExam5View);AddDocTemplate(pDocTemplate);改为:pDocTemplate = new CSingleDocTemplate(/IDR_MAINFRAME,IDR_MENU1,RUNTIME_CLASS(CExam5Doc),RUNTIME_CLASS(CMainFrame), / main SDI frame windowRUNTIME_CLASS(CExam5View);AddDocTemplate(pDocTemplate);运行程序,得到如图3-14所示 图3-14 程序运行结果示例四: 工具栏及非模态对话框(1) 为工具栏添加按钮打开资源视图ResouceView中的Toolbar,双击IDR_MAINFRAME,在右侧资源编辑窗口中出现标准工具栏。选中空白按钮,绘制一个对勾,如图3-15所示:图3-15 添加工具栏按钮(2) 为按钮添加消息函数打开属性对话框,设置新按钮的ID标识符为ID_BUTTON_DO,如图3-16所示:图3-16 设置按钮属性对话框选中新按钮,按Ctrl+W,为按钮ID_BUTTON_ON添加消息函数OnButtonDo,响应用户鼠标单击该按钮的操作,如图3-17所示:图3-17 添加消息成员函数(3) 创建非模态对话框ID_DIALOG3具体操作:Ctrl+R,添加新对话框资源IDD_DIALOG3,为该对话框资源配置新类CNewDialog,如图3-18所示:图3-18 为对话框资源配置代码(4) 调用非模态对话框向主框架类头文件中添加下列语句#include NewDialog.hclass CMainFrame : public CFrameWndprotected: / create from serialization onlyCMainFrame();DECLARE_DYNCREATE(CMainFrame)public:CNewDialog *pDlg; /定义非模态对话框指针 pDlg向主框架类构造函数及析构函数中添加下列代码:CMainFrame:CMainFrame()pDlg=NULL;CMainFrame:CMainFrame()delete pDlg; 向消息函数OnButtonDo中添加代码如下:void CMainFrame:OnButtonDo() if(pDlg=NULL)pDlg= new CNewDialog();/实例化非模态对话框指针pDlg-Create(IDD_DIALOG3,this);/创建非模态对话框pDlg-ShowWindow(SW_SHOW);/显示非模态对话框四. 实验内容(1) 为示例四添加新按钮,调用模态对话框IDD_DIALOG2,比较模态与非模态对话框区别。(2) 改进示例四,向非模态对话框IDD_DIALOG3面板中添加一个文本框和按钮,运行程序,单击按钮,将输入在文本框中的信息显示在单文档界面中。(3) 改进示例三,添加两个菜单项,分别调用模态对话框IDD_DIALOG2与非模态对话框IDD_DIALOG3。五. 思考题(1)应用程序向导创建的单文档应用程序包含那些类,它们的主要作用是什么?(2)用户可自定义菜单,可以自定义工具栏否?如何实现?(3)总结非模态对话框的创建步骤。(4)单文档应用程序中的状态栏如何使用?实验四 文档视图及用户自定义类一. 实验目的(1)掌握封装用户数据结构的方法(2)使用数据流的序列化驻留信息(3)掌握集合类组织数据的方法(4)掌握数据处理基本算法二. 重点和难点介绍(1)在编制应用程序过程中,首先考虑的是根据软件设计目标定义用户数据结构,通常使用用户自定义类来实现。(2)用户数据流通常产生于界面(由键盘或其它选择实现),由视图类负责与界面数据的交互。(3)用户数据暂时驻留内存,由文档类中的集合类来组织,并辅佐特定的算法。(4)数据处理的最终结果被序列化,实现了这些数据的永久驻留(存盘)。三. 实验示例示例一: 学生成绩处理程序具体操作见教材P108P117示例二: 数据的序列化具体操作见教材P118P123示例三: 学生成绩的链式存储具体操作见教材P127P132四. 实验内容五. 思考题(1)如何在类中

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论