您的位置:首页 > 其它

TN25 文档,视图和框架之创建

2015-09-16 15:05 204 查看
此技术点讲述了创建和所属权问题——对于WinApp(程序对象),DocTemplates(文档模板)Documents,Frame和View。[ 你也可以在Visual C++ Programmer's Guide(《程序员手册》)中找到相关问题的解答] 

WinApp 一般地一个程序都有一个CWinApp对象,它被静态的创建并初值化。【参见相关语句】 这是由MFC框架内部在WinMain函数中实现的。

你必须从CWinApp导出自己的类,来做一些有用的工作。(注:DLL中无CWinApp对象。)

一个CWinApp对象拥有一系列文档模板(DocTemplate),其由CPtrList集成。

文档模板通常通过CWinApp::InitInstance函数,由资源文件(.rc)中的字符串资源导入。

pTemplate=new CDocTemplate(IDR_MYDOCUMENT,...);
AddDocTemplate(pTemplate);
这个CWinApp对象拥有此程序中全部的框架窗口。程序的主框架窗口会被存储在CWinApp::m_pMainWnd中,通常如果你没有让AppWizard为你设置此值,你也可以在InitInstance函数中设置m_pMainWnd值。

对SDI应用(single doucument interface),此中CFrameWnd类窗口不仅作为程序的主窗口而且也是唯一的文档框架窗口。对于MDI应用(multiple document interface),此中的MDI_Frame(一般为CMDIFrameWnd)是作为应用程序之主窗口。它包容了所有的子CFrameWnd窗口。实际上,每个子窗口是类CMDIChildWnd,而此类继承了CFrameWnd.这种子窗口可作为文档框架窗口的一种潜在选择。

CDocTemplate 文档模板类是文档之创建者和管理者,它拥有其创建之文档。(如果你的程序使用基于资源之方法,即并非基于文档,它就不需要从CDocTemplate继承)。

对于SDI应用,类CSingleDocTemplate记录了一个打开的文档。对于MDI应用,类CMultiDocTemplate 记录了一个包含所有从此模板创建的当前打开之文档的列表(用类CPtrList)。

CDocTemplate::AddDocument和CDocTemplate::RemoveDocument两个虚拟成员函数,用于从模板中添加和移除某个文档。CDocTemplate是CDocument类之友元,因此我们可以通过设置保护成员变量CDocument::m_pDocTemplate来指定创建某文档的文档模板。CWinApp有OnFileOpen函数之缺省实现,该函数将会依次查询所有之文档模板。此实现还包括查找已经打开的文档和决定新文档以何种样式打开。

CDocTemplate类 管理文档和框架之间的UI绑定。CDocTemplate记录了未命名之文档数量。

CDocument(文档)

一个CDocument由一个CDocTemplate对象拥有。文档有一个当前已打开视图之列表(它们是从CView类继承而来)。文档通过一个CPtrList对象来和观察其内容之视图相联。

文档(或说文档类)并不创建/销毁视图,但二者在他们创建后即相互关联。当一个文档被关闭,(即通过菜单File/Close),其相关之视图也被关闭。与之相对,当某一文档之最后一个视图被关闭(Window/Close菜单),此文档也被关闭。文档类中AddView,RemoveView函数(界面)用于管理类中视图列表。CDocument是CView之友元类。因此我们可以设置CView::m_pDocument变量来回指。

CFrasmeWnd框架窗口

一个CFrameWnd在MFC1.0中被视作一个框架窗口,而现在CFrameWnd已经被设计成可直接用于许多场合而不需要导出新类的一个类。MFC中的导出类CMDIFrameWnd和CMDIChildWnd同样也被改进了,使得许多标准的操作命令已被完整实现了。CFrameWnd负责创建框架窗口之客户区的视窗控件。通常由一个主窗口控件(或称窗口)来填充框架窗口之客户区。

对于一个SDI-Frame框架或一个MDI-Child框架窗口,客户区通常由一个从CWiew导出类之对象来填充。对于一个MDI-Frame窗口,其客户区由MDICLIENT控件来填充。同时,MDICLIENT控件是所有MDI-Child框架窗口之父窗口。
对于CSplitterWnd而言,作为其父窗口客户区的视图窗口中填充了CSplitterWnd窗口对象。同时在其每个分离的窗格中,都有一个由CView类继承而来窗口类之对象作为CSplitterWnd之子窗口。(即客户区窗口)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  MFC 文档 视图 框架