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

  • 相关阅读:
    Struts类型转换
    Oracle的学习,知识点整理
    常用的Oracle_SQL语句
    Oracle的优化
    Oracle创建表空间,用户,授权
    Linux权限的控制
    Oracle实例的3种连接方式和所使用的连接工具
    Oracle数据库打开端口
    Hibernate一对多配置
    hibernate UUID问题
  • 原文地址:https://www.cnblogs.com/boobuy/p/2865937.html
Copyright © 2011-2022 走看看