zoukankan      html  css  js  c++  java
  • VS2010/MFC编程入门之三十九(文档、视图和框架:概述)

     前面几节讲了菜单工具栏状态栏的使用,鸡啄米本节开始将为大家讲解文档、视图和框架的知识。

           文档、视图和框架简介

           在VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)创建的单文档工程Example34中,我们可以看到MFC向导自动为我们生成了CExample34Doc类、CExample34View类和CMainFrame类,它们就分别是文档类、视图类和框架窗口类。

           文档/视图结构是MFC提供的一种不错的设计,它将数据的处理和显示分开来,这样更便于我们对程序的维护和扩展。下面分别介绍这种结构中涉及到的几个重要概念。

           文档

           文档对象用于管理和维护数据,包括保存数据、取出数据以及修改数据等操作,在数据被修改以后,文档可以通知其对应的所有视图更新显示。

           视图

           视图对象将文档中的数据可视化,负责从文档对象中取出数据显示给用户,并接受用户的输入和编辑,将数据的改变反映给文档对象。视图充当了文档和用户之间媒介的角色。

           框架

           一个文档可能有多个视图界面,这就需要有框架来管理了。框架就是用来管理文档和视图的。框架窗口是应用程序的主窗口,应用程序执行时会先创建一个最顶层的框架窗口。视图窗口是没有菜单和边界的子窗口,它必须包含在框架窗口中,即置于框架窗口的客户区内。

           文档模板

           文档模板中存放了与文档、视图和框架相关的信息。应用程序通过文档模板创建文档对象、框架窗口对象和视图对象。另外,文档、视图和框架之间的关系也是由文档模板来管理的。

           我们来看看Example34单文档程序中,CExample34App应用程序类的成员函数CExample34App::InitInstance()创建并注册文档模板的部分:

    C++代码
    1. BOOL CExample34App::InitInstance()   
    2. {   
    3.     ......略   
    4.     // Register the application's document templates.  Document templates   
    5.     //  serve as the connection between documents, frame windows and views   
    6.     CSingleDocTemplate* pDocTemplate;   
    7.     pDocTemplate = new CSingleDocTemplate(   
    8.         IDR_MAINFRAME,   
    9.         RUNTIME_CLASS(CExample34Doc),   
    10.         RUNTIME_CLASS(CMainFrame),       // main SDI frame window   
    11.         RUNTIME_CLASS(CExample34View));   
    12.     if (!pDocTemplate)   
    13.         return FALSE;   
    14.     AddDocTemplate(pDocTemplate);   
    15.   
    16.     ......略   
    17.   
    18.     return TRUE;   
    19. }  

           在构造文档模板类CSingleDocTemplate的对象时,第一个参数是资源ID IDR_MAINFRAME,它包括框架窗口图标等,后面的三个参数都是RUNTIME_CLASS宏的调用,RUNTIME_CLASS用于获取类的运行时信息,文档模板可以根据这些动态创建信息来创建相应类的对象,即文档对象、框架窗口对象和视图对象。AddDocTemplate函数用来注册文档模板对象。

    VS2010/MFC编程入门之三十九(文档、视图和框架:概述)

           框架类、文档类和视图类

           在VS2010自动生成的代码中,框架类继承于CFrameWndEx类,文档类继承于CDocument类,视图类继承于CView类。

           CFrameWndEx类又继承于CFrameWnd类,CFrameWnd类中用于管理文档和视图的成员函数包括:

           virtual CDocument* GetActiveDocument( );

           获得当前活动视图对应文档对象的指针,如果不存在则返回NULL。

           CView* GetActiveView( ) const;

           获得当前活动视图对象的指针,如果不存在则返回NULL。

           void SetActiveView(CView* pViewNew, BOOL bNotify = TRUE);

           设置活动视图。参数pViewNew为要激活的视图对象的指针,参数bNotify指定视图是否接收激活通知。

           CDocument类的主要成员函数:

           virtual BOOL OnNewDocument( );

           创建新文档。可以重载使用。

           virtual BOOL OnOpenDocument(LPCTSTR lpszPathName);

           打开文档。参数lpszPathName为要打开的文档的路径。可以重载使用。

           virtual BOOL OnSaveDocument(LPCTSTR lpszPathName);

           保存文档。参数lpszPathName指定文档保存到的全路径。可以重载使用。

           CDocTemplate* GetDocTemplate( ) const;

           获取此文档类型对应的文档模板对象的指针。如果此文档没有被文档模板管理则返回NULL。

           virtual POSITION GetFirstViewPosition( ) const;

           获取文档中视图列表的第一个视图的位置。

           virtual CView* GetNextView(POSITION& rPosition) const;

           利用此函数可以迭代处理文档的所有视图。参数rPosition为上一次调用GetFirstViewPosition或GetNextView成员函数返回的POSITION值的引用。

           void AddView(CView* pView);

           为文档增加一个视图。参数pView为要增加的视图对象的指针。

           void RemoveView(CView* pView);

           移除某个视图与文档的关联。参数pView为要移除的视图对象的指针。

           void UpdateAllViews(CView* pSender, LPARAM lHint = 0L, CObject* pHint = NULL);

           在文档被更改后调用此函数更新视图。参数pSender指向修改文档的视图,实际应用时常用来指定哪个视图不需要更新,如果更新所有视图则设为NULL,参数lHint包含了文档修改的信息,参数pHint指向存储文档修改信息的对象。

           CView类中与文档/视图结构相关的成员函数包括:

           CDocument* GetDocument( ) const;

           获取视图关联的文档对象的指针。如果视图没有关联到文档上则返回NULL。

    转自:http://www.jizhuomi.com/software/181.html

  • 相关阅读:
    MSSQL大量数据时,建立索引或添加字段后保存更改超时该这么办
    POJ 3261 Milk Patterns (后缀数组)
    POJ 1743 Musical Theme (后缀数组)
    HDU 1496 Equations (HASH)
    694. Distinct Substrings (后缀数组)
    POJ 1222 EXTENDED LIGHTS OUT (枚举 或者 高斯消元)
    POJ 1681· Painter's Problem (位压缩 或 高斯消元)
    POJ 1054 The Troublesome Frog (hash散列)
    HDU 1716 排列2
    HDU 4405 Aeroplane chess (概率DP & 期望)
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/9650059.html
Copyright © 2011-2022 走看看