欢迎来到天天文库
浏览记录
ID:38648501
大小:20.31 KB
页数:5页
时间:2019-06-17
《在VC++ 中 使用MFC实现MDI界面》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、在VC++中使用MFC实现MDI界面 MDI(MultipleDocumentInterface)是Windows界面的一种规范,它建立多个窗口来浏览文档数据,如Windows中的ProgramManager等都是按MDI规范实现的。在实际工程软件开发中,许多程序员将其作为一种实现多窗口的标准方法。微软基础类库(MicrosoftFoundationClassLibrary,简称MFC库),是微软公司为方便Windows程序开发所提供的一个功能强大的通用类库。MFC的核心是以类的形式封装了大量
2、WindowsAPI。在可视化编程语言VC++下应用MFC是目前开发Windows程序最方便的途径之一。VC++提供的各种开发工具如AppWizard、ClassWizard和AppStudio,可以建立起具备基本功能的Windows框架程序(Framework)。而程序员所需要做的工作就是将自己特有的代码填入到框架程序中去,从而极大地减少了用户界面编程的工作量,加快了开发速度。关于MDI的标准开发方法可参考一般的Windows编程书籍,本文将介绍利用MFC实现MDI界面。 MFC2.0以上版
3、本支持“文档/浏览视窗”(Document/View)结构模式。由文档负责管理数据,浏览视窗负责数据显示及与用户的交互,从而实现了数据与界面的分离,使整个程序设计更具规范化、模块化。MFC中,“文档”由类CDocument及其派生类实现(简称Doc类);“浏览视窗”由类CView及其派生类实现(简称View类)。二者都包含于应用程序的框架窗口中,并由其管理。使用单文档时,框架窗口由类CFrameWnd及其派生类实现;使用多文档时,框架窗口是利用类CMDIFrameWnd和CMDIChildWnd
4、实现。由文档模板将文档、浏览窗口和框架窗口三者联系起来。 当程序员在AppWizard的Option选项中选择MultipleDocumentInterface时,MFC构架程序(Framework)将自动生成实现MDI基本功能的代码。类CMDIFrameWnd负责整个应用程序的主框架窗口;类CMDIChildWnd实现MDI的子窗口框架,它不带菜单项,而与主框架窗口共享菜单。主框架窗口依据当前激活的子窗口自动更换菜单项。CView则负责MDI子窗口客户区中显示的具体内容。例如,AppWiza
5、rd的以M01为Project名建立的构架程序(framework)中包括一些基本类:主框架窗口CMainFrame:派生自CMDIFrameWnd;文档CM01Doc:派生自CDocument;浏览窗口CM01View:派生自CView;其中CM01Doc、CM01View和CMDIChildWnd由多文档模板CMultiDocTemplate联系在一起。在CM01App::InitInstance()函数中代码如下: BOOLCM01App::InitInstance() { ....
6、.. CMultiDocTemplate*pDocTemplate; //CMultiDocTemplate用于MDI文档 pDocTemplate=newCMultiDocTemplate( IDR_M01TYPE,//资源标识 RUNTIME_CLASS(CM01Doc), //文档类 RUNTIME_CLASS(CMDIChildWnd), //标准MDI子窗口框架 RUNTIME_CLASS(CM01View)); //浏览视窗类 AddDocTemplate(pD
7、ocTemplate); //为整个应用程序添加新模板 ...... } 此时,数据Doc类仅与一种View类相关联,MDI每个子窗口显示的内容是一致的。如果用户希望不同的子窗口显示不同的文档,则需要分别建立新的资源项、新的文档类、新的View类,并且用新模板将他们与CMDIChildWnd联系起来即可。MFC框架程序将复杂的消息发送和接收机制隐藏起来,自动实现子窗口的调度安排。程序员只需设定自己的数据,并在各个View中重载OnDraw()函数,完成所需的绘制。 然而在实际开发应用程
8、序中,常常希望对某一类数据进行不同方式的显示,既可观察数值,又可有图形显示。这就要求同一种Doc类与多个View类相关联,而每个View类对应一个不同的MDI子窗口。CMultiDocTemplate的典型用法是建立独立的文档结构和View对象。而下面CMultiDocTemplate将使用同一文档和多个View类。 (1)用ClassWizard建立一新的View类:CM02View。 (2)建立新模板: CMultiDocTemplate*pDocTemplate02=newCMult
此文档下载收益归作者所有