zoukankan      html  css  js  c++  java
  • 文档视图

    这张图也是个高人给我的,感觉有点像什么藏宝图似的.不过仔细一看,可能你真的会发现宝藏:

    1. SDI是一中文档视图结构,由于文档视图与框架是相互联系的,彼此都包含了指向对方的指针,所以得有一个东西来管理他们,协调他们.文档模板就是这个作用:

    它的构造函数如下:

    pDocTemplate (
     UINT nIDResouce,CRunTimeClass* pDocClass,CRuntimeClass * pFrameClass,CRuntimeClass* pViewClass);

    那么这个对象是什么时候构造的呢?

    BOOL CMyApp::InitInstance()
    {
     AfxEnableControlContainer();

    ......

     CSingleDocTemplate* pDocTemplate;

    pDocTemplate = new CSingleDocTemplate(
      IDR_MAINFRAME,
      RUNTIME_CLASS(CMyDoc),
      RUNTIME_CLASS(CMainFrame),       // main SDI frame window
      RUNTIME_CLASS(CMyView));
     AddDocTemplate(pDocTemplate);

    这就是先构造了个文档模板类指针,然后添加到文档模板链表(AddDocTemplate(pDocTemplate);)

    2.

    在OnNewDocument创建一份文档时,程序会调用很多函数(已经封装),有一个是CSingleDocTemplate::OpenDocumentFile,接着该函数就会调用CreateNewDocument,CreateNewFrame等来创建一个新的文档类对象,框架类对象和视类对象.一起为这份文档服务.

    3.CSingleDocTemplate::OpenDocumentFile该函数会被调用的原因就是因为前面创建了单文档模板指针,添加进指针链表中,尔后又被其他函数从指针链表取出这个文档模板指针,从而实现调用,

    4.上面的图已经很清楚的说明几个重要的类之间的关系,其中m_开头的都表示是该类中的成员变量,指向其他的类,当然也可以用成员函数来获得其他类的指针,如:

    获得框架指针:用全局函数AfxGetMainWnd(),在视类中用GetParent();

    获得视类指针:在框架类中用GetActiveView(),在文档类中用GetNextView(),在其他地方用AfxGetMainWnd()->GetActiveView()

    获得文档类指针:在视类中用Get Document(),在框架类中用GetActiveDocument();

    获得应用程序类指针:任何地方调用AfxGetApp(),因此如果要定义全局变量,那么在应用程序类中定义是个不错的办法

    文章来自http://www.programfan.com/blog/article.asp?id=18769

  • 相关阅读:
    02-model设计
    01-开发环境搭建
    04-Uwsgi配置启动Nginx虚拟主机配置
    03-MySQL安装与配置
    02-Nginx配置
    01-Nginx安装
    22-注册、登录、验证登录
    21-django-pure-pagination分页
    (二)windows上使用docker
    Docker在windows7上的安装
  • 原文地址:https://www.cnblogs.com/boobuy/p/2865937.html
Copyright © 2011-2022 走看看