zoukankan      html  css  js  c++  java
  • 文档/视图(01):第一个Demo

    学习文档视图编程的第一个demo,程序比较简单,主要对文档模板,文档,视图等相互关系的一个了解。

    功能:菜单添加一个[操作]项,然后新建四份空白文档,点击[操作]之后,在四份空白文档上面各绘制一个Button按钮。

    思路:

    经过应用程序的InitInstance()函数调用,事实上已经产生了两个结果

    第一:建立了一个多文档模板,也就是一份MultiDocTemplate。
    第二:同时,创建了一份框架、视图和Document。(也就是新建一份空白没有任何内容的三组内容)

    文档模板即是打开文件的相关格式的规则约定等等,比如一个应用程序可以打开文本txt格式,也可以打开一幅图片,那么文本和图片就是两种不同的文档模板。再比如像NotePad这样的软件,可以打开几十种文件格式。

    文档模板挂接了后面要介绍的文档、视图和框架窗口,使得它们得以互相关联。通过文档模板,程序确定了创建或打开一个文档时,以什么样的视图和框架窗口来显示。文档模板依靠保存相互对应的文档、视图和框架窗口的CRuntimeClass对象指针来实现上述挂接,这就是文档模板类中的成员变量m_pDocClass、m_pFrameClass、m_pViewClass的由来。实际上,对m_pDocClass、m_pFrameClass、m_pViewClass的赋值在CDocTemplate类的构造函数中实施。引:《轻松玩转MFC文档视图编程》

    如果定义了多种文档模板,这些模板通过CDocManager这种对象管理。

    CDocManager对象存在于应用程序对象中。

    void CBbaadView::OnPp() //视图类中的成员函数,响应【操作】菜单
    {
        CBbaadDoc *doc=GetDocument();
        CMultiDocTemplate *multi=(CMultiDocTemplate *)doc->GetDocTemplate();
        POSITION p1=multi->GetFirstDocPosition();
        while(p1)
        {
            CDocument *pDocument=multi->GetNextDoc(p1);
            POSITION p2=pDocument->GetFirstViewPosition();
            while(p2)
            {
                CBbaadView *view=(CBbaadView*)pDocument->GetNextView(p2);
                view->AddBtn();            
            }
        }
    
    }
    
    void CBbaadView::AddBtn()//视图类中的成员函数,绘制按钮
    {    
        btn[i].Create("按钮",BS_DEFPUSHBUTTON | WS_VISIBLE | WS_CHILD,CRect(0,0,100,100),this,666);
        btn[i].ShowWindow(SW_SHOWNORMAL);
        i++;
    }
  • 相关阅读:
    Java new关键字的对象内存分配原理
    Android idleHandler
    Android Perffto工具
    Android Systrace工具
    Android TraceView工具
    Android App启动时间测量
    Android App启动分类
    Android线程的消息队列
    2018.2.28(延迟加载和缓存)
    2018.2.27(关联查询)
  • 原文地址:https://www.cnblogs.com/tinaluo/p/7845374.html
Copyright © 2011-2022 走看看