~$ 存档

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

学习文档视图编程的第一个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++;
}

 

posted on 2017-11-16 17:19  LuoTian  阅读(268)  评论(0编辑  收藏  举报