版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章对话框、常用消息、菜单和工具栏提纲10.3对话框13210.2常用消息10.1对话框10.4菜单和工具栏410.5视图与文档52023/3/30济南大学自动化学院2对话框对话框可按其工作模式分为两类:有模式对话框:在对话框被关闭之前,用户无法再进行其他工作;无模式对话框:在对话框关闭之前,用户可以在应用程序的其他窗口进行工作;2023/3/303济南大学自动化学院对话框工具箱2023/3/30济南大学自动化学院410.1常用控件常用控件按钮控件2023/3/30济南大学自动化学院510.1常用控件编辑框控件2023/3/30济南大学自动化学院610.1常用控件列表控件列表控件功能强大,它不仅能显示文本,还能显示图像。列表控件一共有4种形式,分别是大图标(Icon)、小图标(small)、列表(List)和报表(report)形式,最常用的类型是以网络列表形式显示报表2023/3/307济南大学自动化学院10.2常用消息在键盘消息中,将按键分成两类:(1)系统键:指输入键与Alt键组合产生的,系统键操作一般由Windows内部处理,而应用程序不须处理。(2)非系统键:指输入键不与Alt键组合按下的键。2023/3/30济南大学自动化学院810.2常用消息按键消息处理:当键盘某键按下后又释放,不论该键是否会产生可见字符,都会产生WM_KEYDOWN和WM_KEYUP两个消息。当Widows系统将消息送往应用程序窗口时,通过MFC中的消息映象找到对应的消息处理函数,可在消息处理函数中加入相应的代码,这样便可执行相关的操作。2023/3/30济南大学自动化学院910.2常用消息字符消息处理:字符消息WM_CHAR只针对那些产生可见字符的键而言的,输入一个可见字符将产生WM_CHAR消息。2023/3/30济南大学自动化学院1010.2常用消息鼠标消息及鼠标消息的处理用户区域鼠标消息:鼠标指针通过应用程序窗口的用户区域时,Windows系统将发送用户区域鼠标消息到应用程序中。用户区域鼠标消息是用户可以在Windows应用程序中正常处理的信息。当鼠标移动到应用程序窗口的用户区域外面时,应用程序将停止接收用户区域的鼠标消息,而Windows将把鼠标消息发送给鼠标碰巧通过的元素当鼠标移回到窗口的用户区域时,Windows会重新把鼠标消息发送方向指向应用程序(在应用程序已经捕获了鼠标时例外)2023/3/30济南大学自动化学院112023/3/3010.2常用消息非用户区域鼠标消息:在Windows中,除了用户区域以外的应用程序窗口部分都为非用户区,Windows将会给应用程序发送非用户区域鼠标消息。例如鼠标通过窗口的标题栏或控制按钮时,应用程序会接收非用户区域鼠标消息。一般应用程序不处理非用户区域鼠标消息,它们可以被Windows系统本身默认地处理。济南大学自动化学院122023/3/30济南大学自动化学院1310.2常用消息鼠标消息的处理:鼠标消息处理与键盘消息处理的方式相同,一般都是用ClassWizard添加消息映象函数,并为函数加入代码Windows编程需要捕捉所有鼠标消息,并将它们发送到应用程序中。这一行为称为捕捉鼠标。这种编程方法经常被用在鼠标按钮按下或按钮释放消息中。10.2常用消息鼠标捕捉如果鼠标右键在用户区被按下,而鼠标右键在释放时,鼠标的位置已经不在用户区中了,这时鼠标右键的释放的消息并没有发送到应用程序中为了使鼠标右键释放的消息也发送到应用程序中在鼠标右键在用户区被按下的消息响函数OnRButtonDown()中加上SetCapture()进行鼠标捕捉在鼠标右键被释放的消息响函数OnRButtonUp()中加上ReleaseCapture()释放鼠标捕捉。2023/3/30济南大学自动化学院1410.3对话框用资源编辑器建立对话框例例10-1,建立对话框,能够输入学生档案,包括学生的姓名、性别、系等数据。设计思路:定义一个学生档案数据的结构,在CS10_1View类中定义该结构的对象,用于保存学生档案。然后建立一个对话框,通过对话框将学生档案输入到该学生对象中。实现步骤如下:2023/3/30济南大学自动化学院1510.3对话框1.在Cs10_1View类的头文件中定义学生档案数据//Cs10_1View.hstructSTUDENT{CStringname;CStringdept;CStringsex;};classCs10_1View:publicCview{……protected:STUDENTs; //s用于保存学生档案};2023/3/30济南大学自动化学院1610.3对话框2.用资源编辑器建立输入学生档案的对话框1)打开项目文件,选择资源编辑器向导“ResourceView”,展开“Myresources”,右键单击“Dialog”列表项,从弹出的快捷菜单中选择“InsertDialog”,在资源编辑器中插入一个对话框,如图所示2023/3/30济南大学自动化学院1710.3对话框2)调整对话框的大小,然后利用工具箱中的标签和编辑框等控件设计出如图所示的学生档案输入对话框为了能在程序中方便地操作各个对话框控件“姓名”后面的编辑框ID改为IDC_Name,单选项“男”的ID改为IDC_Man,单选项“女”的ID改为IDC_Female,“系”后面的编辑框ID改为IDC_Dept。2023/3/30济南大学自动化学院1810.3对话框3)完成上述设置后,双击对话框的任一位置,MFC将弹出建立新类的向导对话框,按默认设置选择“Createanewclass”,MFC将弹出指定新类名字和基类的对话框,如图所示。在“name”中输入对话框类的名字“Student”,在“BassClass”编辑框中指定其基类为CDialog。设置完成并单击“确定”按钮后,将出现MFC向导对话框,单击其中的“确定”按钮,MFC将在项目中添加对话框类Student。2023/3/30济南大学自动化学院1910.3对话框4)上述向导过程将生成一个对话框类Student//Student.hclassStudent:publicCdialog{public:Student(CWnd*pParent=NULL);//{{AFX_DATA(Student)enum{IDD=IDD_DIALOG1}; //对话框的标识
//}}AFX_DATA//{{AFX_VIRTUAL(Student)protected:virtualvoidDoDataExchange(CDataExchange*pDX); //数据交换函数
//}}AFX_VIRTUALDECLARE_MESSAGE_MAP()};对话框标识数据交换函数,它将被自动调用,实现对话框与类的数据交换成2023/3/30济南大学自动化学院2010.3对话框3.利用类向导添加对话框类的数据交换成员1)按快捷键Ctrl+W显示类向导对话框,选中“MemberVariables”,在“Classname”列表中选中Student。在ControlIDs中列出了对话框中需要定义对应数据成员的控件ID。2)选中“IDC_Dept”,然后单击“AddVariable”按钮,弹出定义类成员的对话框。设置Student对话框中各控件标识对应的类成员。2023/3/30济南大学自动化学院2110.3对话框完成上述定义,向导在该类的声明中添加了下面的数据成员定义:classStudent:publicCDialog{public://{{AFX_DATA(Student)enum{IDD=IDD_DIALOG1};CStringm_Dept;
CStringm_Name;intm_Sex;//}}AFX_DATA……};向导添加了3个数据成员的定义2023/3/30济南大学自动化学院2210.3对话框向导还在对话框的数据交换成员函数Student::DoDataExchange中添加了如下代码voidStudent::DoDataExchange(CDataExchange*pDX){CDialog::DoDataExchange(pDX);//{{AFX_DATA_MAP(Student)DDX_Text(pDX,IDC_Dept,m_Dept);
DDX_Text(pDX,IDC_Name,m_Name);DDX_Radio(pDX,IDC_Man,m_Sex);//}}A向导添加了3个数据交换的代码2023/3/30济南大学自动化学院2310.3对话框4.用对话框输入数据对话框类建立后,可以像普通类一样使用先在要操作对话框的函数中定义对话框类的对象,并调用对话框对象的DoModal成员函数运行对话框,然后通过对话框类的数据成员就能够获取对话框控件中的数据。2023/3/30济南大学自动化学院2410.3对话框本例将通过Cs10_1View类的右键双击事件打开一个Student对话框并通过该对话框输入一个学生的档案信息到Cs10_1View类的成员s中,然后在OnPaint成员函数中输出从对话框输入的学生信息。过程如下:1)在CMyView.cpp中包含对话框类的头文件Student.h://MyView.cpp#include"stdafx.h"#include"My.h"#include"MyDoc.h"#include"MyView.h"#include"Student.h"增加对话框类的头文件包含2023/3/30济南大学自动化学院2510.3对话框2)添加鼠标右键双击的成员函数通过MFC的类向导,为类Cs10_1View添加鼠标右键双击事件的消息处理函数OnRButtonDblClk,并在该消息处理函数中添加如下程序代码:voidCMyView::OnRButtonDblClk(UINTnFlags,CPointpoint){StudentstuDlg; /定义对话框对象
if(stuDlg.DoModal()==IDOK) //执行对话框
{
=stuDlg.m_Name;//获取对话框的姓名到CMyView类中
s.dept=stuDlg.m_Dept;if(stuDlg.m_Sex==0)//分组框中值是0,表示男
s.sex="男";elses.sex="女";}InvalidateRect(FALSE);//产生WM_PAINT消息
CView::OnRButtonDblClk(nFlags,point);}2023/3/30济南大学自动化学院2610.3对话框3)在OnPaint成员中输出学生对象s的值,这些值是从对话框中获取的。voidCMyView::OnPaint(){CPaintDCdc(this);LOGFONTfont;font.lfHeight=100;font.lfItalic=0;font.lfEscapement=0;font.lfCharSet=GB2312_CHARSET;font.lfUnderline=0;font.lfStrikeOut=0;CFontnFont,*oFont;nFont.CreateFontIndirect(&font);oFont=dc.SelectObject(&nFont);dc.TextOut(0,150,+""+s.dept+""+s.sex);//输出s的各个域的值
dc.SelectObject(&oFont);}2023/3/30济南大学自动化学院2710.4菜单和工具栏菜单:通过选择菜单选项,可使应用程序完成与菜单项相关的命令。工具栏:工具栏为用户提供了快捷的命令选择方式,一般情况下工具栏的每个按钮对应一个菜单项。用户点击某个按钮,其作用与选取相应菜单选项是相同的。2023/3/30济南大学自动化学院2810.4菜单和工具栏在VC++程序设计中,菜单和工具栏的设计过程相同,需要通过以下3个步骤实现:1)通过资源编辑器修改或建立菜单与工具栏。2)通过MFC向导建立各菜单项或工具命令按钮的消息响应函数。3)通过应用程序框架提供的菜单或工具栏加载命令,将菜单或工具栏加载到应用程序框架中2023/3/30济南大学自动化学院2910.4.1应用程序框架菜单例10-10,设计菜单,并通过菜单完成画线、画椭圆、画矩形等功能1用菜单编辑器添加菜单栏及菜单项1)启动VC++并打开项目文件,选择工程管理窗口中的ResourceView标签,展开Menu菜单资源列表项,在其中可以见到IDR_MAINFRAME,它就是应用程序菜单的标识,双击该标识将在右边编辑窗口中见到它所代表的菜单内容,如图所示2023/3/30济南大学自动化学院3010.4.1应用程序框架菜单2)右键单击图中“帮助”菜单后面的虚线框,将弹出属性对话框,在编辑框中输入“绘图”。由于“绘图”是主菜单,选择它时并不需要执行任何程序功能,所以其属性对话框中的“ID”是禁用的3)完成上面的步骤后,在“绘图”菜单栏的下面将会出现虚线框,右键单击它并将其“标题”设置为“直线”,将其“ID”设置为“ID_LINE”2023/3/30济南大学自动化学院3110.4.1应用程序框架菜单4)用同样的方法在“直线”下面添加“矩形”,“椭圆”菜单项,并将矩形的ID设置为“ID_RECT”,将椭圆的ID设置为“ID_ELLIPSE”。5)在“绘图”后面增加一个“学生管理”菜单,在该菜单下面添加“输入学生档案”菜单项,将该菜单项的ID设置为“ID_STUDENT”。6)修改或删除菜单栏中不需要的菜单,如删除其中的“帮助”菜单,方法是选中该菜单,然后按Delete键或选择VC++“编辑”菜单中的“删除”命令。2023/3/30济南大学自动化学院3210.4.1应用程序框架菜单2.利用向导生成菜单消息响应函数1)按快捷键Ctrl+W键启动MFC的类向导。2)选择类向导中的“MessageMaps”标签,在“Classname”下拉列表中选择“CS10_10View”类,在“ObjectIDs”列表中具有所有的菜单标识,找到并选中“ID_LINE”菜单标识,并选中“Messages”列表中的“COMMAND”,然后单击命令按钮“AddFunction…”。该操作会为CS10_10View类添加消息响应函数OnLine。3)用同样的方法为CMyView类增加ID_RECT、ID_ELLIPSE和ID_STUDENT菜单标识的消息响应函数:OnRect、OnEllipse、OnStudent。2023/3/30济南大学自动化学院3310.4.1应用程序框架菜单经过上述操作,MFC向导会在CMyView类中完成下面的3件事。①向导将在CMyView类中添加消息响应函数的声明,如下所示:classCMyView:publicCView{……protected:……afx_msgvoidOnLine();afx_msgvoidOnEllipse();afx_msgvoidOnRect();afx_msgvoidOnStudent();};向导添加的菜单消息处理函数2023/3/30济南大学自动化学院3410.4.1应用程序框架菜单②向导将在程序实现文件Cs10_10View.cpp的消息映射宏中,添加菜单项与消息处理函数之间的映射,如下所示:BEGIN_MESSAGE_MAP(CMyView,CView)//{{AFX_MSG_MAP(CMyView)……
ON_COMMAND(ID_LINE,OnLine)ON_COMMAND(ID_ELLIPSE,OnEllipse)ON_COMMAND(ID_RECT,OnRect)ON_COMMAND(ID_STUDENT,OnStudent)//}}AFX_MSG_MAPEND_MESSAGE_MAP()红字是向导添加的菜单消息映射宏2023/3/30济南大学自动化学院3510.4.1应用程序框架菜单③向导将在类的程序文件CMyView.cpp中添加消息处理函数的雏形,如下所示。voidCMyView::OnLine(){//TODO:Addyourcommandhandlercodehere}向导添加的菜单消息处理函数雏形2023/3/30济南大学自动化学院3610.4.1应用程序框架菜单3在向导生成的消息处理函数中添加函数功能代码voidCMyView::OnLine() //选择“绘图|直线”菜单执行该函数{
CClientDCdc(this); //获取设备环境
dc.MoveTo(50,100);//将光标移到(50,100)位置
dc.LineTo(100,300);//从光标位置即(50,100)画直线到(100,300)}voidCMyView::OnEllipse()//选择“绘图|椭圆”菜单执行该函数{
CClientDCdc(this);dc.Ellipse(100,100,200,300);}2023/3/30济南大学自动化学院3710.4.1应用程序框架菜单voidCMyView::OnRect()//选择“绘图|矩形”菜单执行该函数{
CClientDCdc(this);dc.Rectangle(300,100,500,200);}voidCMyView::OnStudent(){//选择“学生管理|输入学生档案”执行该函数
StudentstuDlg;if(stuDlg.DoModal()==IDOK){=stuDlg.m_Name;s.dept=stuDlg.m_Dept;if(stuDlg.m_Sex==0)s.sex="男";elses.sex="女";}InvalidateRect(FALSE);}2023/3/30济南大学自动化学院3810.4.2建立新菜单栏例10-11为例10-10重新建立一新菜单,实现同样的功能。实现过程简述如下1)在VC++中打开例10-10建立的项目文件,在工程管理窗口“ResourceView”中展开“Myresources”资源,右键单击“Menu”,并从弹出的快捷菜单中选择“InsertMenu”,将插入一个标识为“IDR_MENU1”的菜单。用前面的方法添加“画图”和“学生”菜单,如图所示。2023/3/30济南大学自动化学院3910.4.2建立新菜单栏新菜单IDR_MENU1,设置其中菜单项“直线”的ID为“IDR_LINE1”,“矩形”的ID为“IDR_RECT1”、“椭圆”的ID为“IDR_ELLIPSE1”,“输入学生档案”的ID为“ID_STUDENT1”。2023/3/30济南大学自动化学院4010.4.2建立新菜单栏2)按快捷键Ctrl+W,弹出如图a所示的对话框,选择“Selectanexistingclass”,然后单击“OK”按钮,弹出如图b所示对话框,选择“CMyView”,然后单击“Select”按钮。2023/3/30济南大学自动化学院4110.4.2建立新菜单栏3)通过消息映射向导“MessageMaps”建立菜单项IDR_LINE1、IDR_RECT1、IDR_ELLIPSE1和ID_STUDENT1的消息映射函数和函数代码。4)加载新菜单。打开CMyApp::InitInstance函数,将其中建立单文档模板时指定的菜单标识IDR_MAINFRAME修改为新菜单的标识IDR_MENU1,如下所示。BOOLCMyApp::InitInstance(){……CSingleDocTemplate*pDocTemplate;pDocTemplate=newCSingleDocTemplate(IDR_MENU1,RUNTIME_CLASS(CMyDoc),RUNTIME_CLASS(CMainFrame),RUNTIME_CLASS(CMyView));……}以前这里是IDR_MAINFRAME2023/3/30济南大学自动化学院4210.4.3工具栏操作工具栏的建立方法与菜单完全相同,但须注意两点1)工具栏的修改或新建需要通过C++工程项目窗口“ResourceView”中的“Toolbar”选项进行2)加载新建工具栏的方法是通过CMainFrame::OnCreate成员函数实现的,如下所示。将IDR_MAINFRAME改为新工具栏的标识就行了!2023/3/30济南大学自动化学院4310.4.3工具栏操作将其中LoadToolBar函数的参数IDR_MAINFRAME修改为新工具栏的标识就行了。intCMainFrame::OnCreate(LPCREATESTRUCTlpCreateStruct){……if(!m_wndToolBar.CreateEx(this,TBSTYLE_FLAT,WS_CHILD|WS_VISIBLE|CBRS_TOP|CBRS_GRIPPER|CBRS_TOOLTIPS|CBRS_FLYBY|CBRS_SIZE_DYNAMIC)||!m_wndToolBar.LoadToolBar(IDR_MAINFRAME
))//加载工具栏
……}将IDR_MAINFRAME改为新工具栏的标识就行了!2023/3/30济南大学自动化学院4410.4.3工具栏操作例10-12建立一个工具栏,工具栏实现与菜单同样的功能。建立过程如下:1)用与新建菜单相同的的方法插入一个工具栏Toolbar,它的默认标识为IDR_TOOLBAR1。2)通过VC++的工具编辑器在IDR_TOOLBAR1上绘制并添加4个图形按钮,如图所示。2023/3/30济南大学自动化学院4510.4.3工具栏操作3)修改命令按钮的ID,方法是双击对应的按钮图标,在弹出的属性对话框中修改ID。直线按钮的ID改为“ID_TLine”,矩形按钮的ID改为“ID_TRect”,椭圆按钮的ID改为“ID_TEllise”,学生按钮的ID改为“ID_TStudent”。4)通过向导指定IDR_TOOLBAR1所属类为CS10_12View。2023/3/30济南大学自动化学院4610.4.3工具栏操作5)通过类向导的“MessageMaps”建立各命令按钮在CMyView类中的消息响应函数,方法与菜单消息响应函数的建立过程相同。然后在各消息响应函数中添加程序代码,如下所示:voidCMyView::OnTEllise(){OnEllipse();}//椭圆按钮voidCMyView::OnTLine(){nLine();}//直线按钮voidCMyView::OnTRect(){OnRect();}//矩形按钮voidCMyView::OnTStudent(){OnStudent();}//学生6)加载工具栏各工具按钮的消息响应函数2023/3/30济南大学自动化学院472023/3/30济南大学自动化学院4810.5视图与文档原CFrameWnd派生类的任务分配给文档类(CDocument)和视图类(CView)。文档类主要负责管理数据通过文档类能够方便地实现磁盘文件的存取操作。视图类主要负责显示文档内容,接收用户的输入视图是框架窗口中的客户区域,是程序与用户的接口,MFC程序常在视图中设计数据的输入输出功能使用文档/视窗结构的意义将数据操作与数据显示分开,可以简化工作量;一组数据可以同时以不同的形式显示在多个视图中10.5视图与文档MFC在文档/视图结构中提供了许多标准的操作界面包括新建文件、打开文件、保存文件、文档打印等,大大减轻了程序员的工作量,支持打印、打印预览和电子邮件发送功能使用AppWizard可生成基于文档/视结构的SDI或MDI框架程序,程序员只需在其中添加与特定应用有关的部分代码,就可完成应用程序的开发工作。2023/3/30济南大学自动化学院4910.5视图与文档应用程序类(CWinApp)控制应用程序的开始运行、初始化和结束生成应用程序类对象后,这个对象自动与Widnows系统建立联系,接收WINDOWS传送的消息,并交给程序中相应的对象去处理。这个类中有一个重要的成员函数:INITINSTANCE,在Windows环境下,可以运行同一程序的多个实例,函数INITINSTANCE的作用是在生成的一个新的实例的时候,完成一些初始化的工作。2023/3/30济南大学自动化学院5010.5视图与文档框架窗口类(CFrameWnd)CFrameWnd类是应用程序的框架窗口。所谓框架窗口是指包括菜单、工具栏、状态栏和窗口客户区的整个应用程序的主窗口,相当于简单应用程序框架中所提到的主窗口。在MFC程序中,一般并不需要经常对CFrameWnd类进行操作,更多的是对视窗类进行操作,达到对程序中的数据进行编辑的修改的目的。2023/3/30济南大学自动化学院5110.5视图与文档视图类(CView)显示数据并接收用户的输入和编辑信息CView类派生于Cwnd类,用于管理文档/视图结构中的窗口客户区,在文档/视图结构中称视图。视图类专门用于对应用程序的数据进行显示,在视图类中有一个很重要的函数OnDraw(),OnDraw()函数是用于进行应用程序数据显示的函数,一般在派生类中要重写这一个函数。在文档/视图结构中,重写的OnDraw()函数首先清空客户区窗口,然后再在窗口上绘制客户需要的内容,也就是说,OnDraw()函数将集中管理所有的数据显示工作。2023/3/30济南大学自动化学院5210.5视图与文档文档类(CDocument)管理程序操作的数据视图类用OnDraw()函数显示数据,但应用程序的数据一般不直接由视图类管理,而是作为文档类(CDocument)的数据成员,由文档类来进行集中管理而且文档类将直接与磁盘相联系,把文档类中的数据存盘,或从磁盘中取出存盘的数据。视图类的函数GetDocument()的返回值就是指向文档类的指针,通过这个指针就可以访问到文档类中的公有数据成员。
文档类的数据要存盘或取盘要与磁盘进行数据传递,可以用CFile类结合CFileDialog类实现。在文档/视图结构中,通过文档类中的序列化函数Serialize()就可以很简单的完成数据存取任务。2023/3/30济南大学自动化学院5310.5视图与文档文档模板(CSingleDocTemplate、CMultiDocTemplate)文档模板类(CDocTemplate)的作用是协调文档/视图结构中文档类、视图类和框架窗口类之间的关系;同时文档模板类还加载了菜单以及与菜单资源使用一个ID的快捷键等资源;具体来说,在CWinApp派生类的InitInstance()函数中建立了文档模板类CDocTemplate,并用文档模板类连接资源、框架窗口、文档和视图。通常,一种特定的文档模板创建并管理已打开的同种类型的所有文档2023/3/30济南大学自动化学院542023/3/30济南大学自动化学院5510.5视图与文档应用程序对象、文档模板、文档及视图的关系应用程序对象发送到视图对象的消息发送到框架窗口的消息视图对象框架窗口对象文档模板对象文档对象(保存程序数据)文档与视图之间双向数据交换2023/3/30济南大学自动化学院5610.5视图与文档每个视图对象与一个唯一的文档对象关联视图类有一个成员函数GetDocument可以获取它对应的文档对象,文档类则有一个成员函数Serialize,它能够实现文档序列化。10.5视图与文档视图类视图类对象完全覆盖框架窗口的用户区,没有自己的边框。视图规定了用户查看文档数据以及同数据交互的方式。CObjectCCmdTargetCWndCViewCScrollViewCFormViewCEditViewCRecordView2023/3/30济南大学自动化学院572023/3/30济南大学自动化学院5810.5视图与文档视图类有几个重要的成员函数GetDocument()成员函数GetDocument()的函数返回值就是指向文档类的指针;通过这个指针就可以访问到文档类中的公有数据成员。OnDraw()成员函数更新视图,其用法类似窗口类的OnPaint()函数OnInitialUpdate()虚成员函数在应用程序启动,或用户从File菜单中选择了New或者Open选项时被调用这是添加某些与文档显示有关的初始化工作的有关代码的地方。重载该虚函数时要注意确保调用了基类CView的OnInitialUpdate()成员函数2023/3/30济南大学自动化学院5910.5视图与文档视窗类中的OnDraw成员函数每当视窗需要被重新绘制时,应用程序框架就要调用OnDraw函数。驱使程序调用OnDraw的两个途径:用户改变窗口的尺寸;窗口恢复先前被遮盖的部分;应用程序改变了窗口数据;程序中调用Invalidate(或者InvalidateRect),通知Windows调用OnDraw函数2023/3/30济南大学自动化学院6010.5视图与文档文档类成员函数OnNewDocument()成员函数来初始化文档对象的数据成员DeleteContents()成员函数的调用有两个作用删除文档的数据确信一个文档在使用前为空SetModifiedFlag()的作用是设置数据修改标志2023/3/30济南大学自动化学院6110.5视图与文档文档序列化是指将程序数据保存在磁盘文件中,或从磁盘文件中读取数据到程序中。文档类的数据要存盘或取盘要与磁盘进行数据传递,可以用CFile类结合CFileDialog类实现。在文档/视图结构中,通过文档类中的序列化函数Serialize()就可以很简单的完成数据存取任务。10.5视图与文档例10-13建立应用程序,使程序能够通过学生档案对话框输入学生档案,并在屏幕上显示输入的学生数据,而且能够实现学生档案数据的磁盘存取操作。设计思路:在Cs10_13Doc类中定义学生对象,并通过Cs10_13Doc的文档序列化函数Serialize实现学生数据的磁盘存取操作,然后在视图类Cs10_13View中通过GetDocument获取文档类的指针,并通过它从磁盘文件读取和显示学生档案,或将对话框中输入的学生档案数据存入磁盘文件中。实现过程如下。2023/3/30济南大学自动化学院6210.5视图与文档1.在文档类Cs10_13Doc中进行的程序修改1)在文档类的头文件Cs10_13Doc.h中定义学生数据结构STUDENT,并在文档类的任一public区域定义一个学生对象,如下://Cs10_13Doc.hstructSTUDENT{CStringname; //CString是MFC中的字符串类
CStringdept;CStringsex;};classCs10_13Doc:publicCdocument{……public:STUDENTs;……virtualvoidSerialize(CArchive&ar);}2023/3/30济南大学自动化学院6310.5视图与文档2)在文档类的构造函数中初始化s成员,代码如下Cs10_13Doc::Cs10_13Doc(){.Empty(); //Empty将CString的成员函数的字符串设置为空串
s.dept.Empty();s.dept.Empty();}2023/3/30
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 红河学院《中学语文教学能力实训》2023-2024学年第一学期期末试卷
- 红河学院《小学社会与品德教育》2022-2023学年第一学期期末试卷
- 红河学院《食品营养学》2021-2022学年第一学期期末试卷
- 衡阳师范学院《自然资源学原理》2022-2023学年第一学期期末试卷
- 有关端午节活动方案模板五篇
- 有关新学期新计划锦集十篇
- 有关新学期的计划范文集锦七篇
- 开学典礼校长致辞简短(7篇)
- 在职员工持股协议书范文模板
- 新学年开学工作会校长讲话稿(15篇)
- 运输公司安全生产方针和目范本
- 私有云平台搭建从入门到通
- 盘扣式落地外脚手架施工方案
- 内科学考点速记
- 儿童简历模板
- 旅行社营销中的危机公关管理
- 脓肿切开引流知情同意书
- 危重症应急预案演练记录
- 汉文专业的职业生涯规划书
- 初中班主任德育论文3000字(10篇)
- Part01 Unit2 Transportation课件【知识精研+拓展提升】 中职专用 高一英语高效课堂
评论
0/150
提交评论