学习文档视图编程的第一个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(,,,),this,);
btn[i].ShowWindow(SW_SHOWNORMAL);
i++;
}