欢迎来到天天文库
浏览记录
ID:19216550
大小:236.50 KB
页数:15页
时间:2018-09-29
《vc++讲义第16单元 多文档视图结构》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、第16单元多文档界面程序340第16单元多文档界面程序本单元教学目标介绍多文档界面(MDI)程序的构造和编程方法。学习要求理解多文档界面(MDI)程序的构造,掌握其编程方法。授课内容和框架窗口界面程序、单文档界面(SDI)程序和基于对话框的应用程序一样,多文档界面(MDI)程序也是基本的MFC应用程序结构。MDI程序的结构最复杂,功能也最强。其特点是用户一次可以打开多个文档,每个文档均对应不同的窗口;主窗口的菜单会自动随着当前活动的子窗口的变化而变化;可以对子窗口进行层叠、平铺等各种操作;子窗口可以在MD
2、I主窗口区域内定位、改变大小、最大化和最小化,当最大化子窗口时,它将占满MDI主窗口的全部客户区。MDI不仅可以在同一时间内同时打开多个文档,还可以为同一文档打开多个视图。16.1MDI应用程序从程序员角度看,每个MDI应用程序必须有一个CMDIFrameWnd或其派生类的对象,该窗口称作MDI框架窗口。CMDIFrameWnd是CFrameWnd的派生类,除了拥有CFrameWnd类的全部特性外,还具有以下与MDI相关的特性:1.与SDI不同,MDI的框架窗口并不直接与一个文档和视图相关联。MDI的框架
3、窗口拥有客户窗口,在显示或隐藏控制条(包括工具条、状态栏、对话条)时,重新定位该子窗口。2.MDI客户窗口是MDI子窗口的直接父窗口,它负责管理主框架窗口的客户区以及创建子窗口。每个MDI主框架窗口都有且只有一个MDI客户窗口。3.MDI子窗口是CMDIChildWnd或其派生类对象,CMDIChildWnd也是CFrameWnd的派生类,用于容纳视图和文档,相当于SDI下的主框架窗口。每打开一个文档,框架就自动为文档创建一个MDI子窗口。一个MDI应用程序负责动态的创建和删除MDI子窗口。在任何时刻,最
4、多只有一个子窗口是活动的(窗口标题栏颜色呈高亮显示)。MDI框架窗口始终与当前活动子窗口相关联,命令消息在传给MDI第16单元多文档界面程序340框架窗口之前首先分派给当前活动子窗口。4.在没有任何活动的MDI子窗口时,MDI框架窗口可以拥有自己的缺省菜单。当有活动子窗口时,MDI框架窗口的菜单条会自动被子窗口的菜单所替代。框架会自动监视当前活动的子窗口类型,并相应的改变主窗口的菜单。例如,在VisualStudio中,当选择对话框模板编辑窗口或源程序窗口时,菜单会有所不同。但是,对于程序员来说,只需在I
5、nitInstance()中注册文档时指定每一类子窗口(严格的讲是文档)所使用的菜单,而不必显式的通过调用函数去改变主框架窗口的菜单,因为框架会自动完成这一任务。5.MDI框架窗口为层叠、平铺、排列子窗口和新建子窗口等一些标准窗口操作提供了缺省的菜单响应。在响应新建子窗口命令时,框架调用CDocTemplate::CreateNewFrame()为当前活动文档创建一个子窗口。CreateNewFrame()不仅创建子窗口,还创建与文档相对应的视图。与开发基于对话框的应用程序和SDI应用程序一样,使用App
6、Wizard可生成一个MDI应用程序框架,在此基础上,程序员可使用ClassWizard和各种资源编辑器来充实自己的应用程序。AppWizard为MDI程序框架创建了以下类:类说明CAboutDlg“关于”对话框CChildFrame子框架窗口,用于容纳视图CMyApp应用程序类CmyDoc绘图程序视图类CMyView绘图视图类CMainFrame框架窗口(用来容纳子窗口),是MDI应用程序的主窗口可以看出,MDI比SDI多了一个CchildFrame(子框架窗口)类,而且CMainFrame的职责也不同
7、了。另外,MDI和SDI的初始化应用程序实例方法上也有所不同。MDI应用程序的InitInstance()函数代码为:BOOLCDrawApp::InitInstance(){……//初始化工作CMultiDocTemplate*pDocTemplate;//MDI文档模板pDocTemplate=newCMultiDocTemplate(IDR_DRAWTYPE,RUNTIME_CLASS(CDrawDoc),RUNTIME_CLASS(CChildFrame),RUNTIME_CLASS(CDrawV
8、iew));AddDocTemplate(pDocTemplate);CMainFrame*pMainFrame=newCMainFrame;//建立MDI主框架窗口第16单元多文档界面程序340if(!pMainFrame->LoadFrame(IDR_MAINFRAME))returnFALSE;m_pMainWnd=pMainFrame;m_pMainWnd->DragAcceptFiles();//设置框架窗口特性En
此文档下载收益归作者所有