ment::GetNextView(); // DOCCORE.CPP CMultiDocTemplate::GetFirstDocPosition(); // DOCMULTI.CPP CMultiDocTemplate::GetNextDoc(); // DOCMULTI.CPP
你还需要与 CWinApp 的成员 m_templateList 打交道。 注意:在 MFC 版本 4.0 中已改变。现在已经有一个叫 CDocManager 的类可以帮助你显示所 有的视图和文档。请参考《MFC Internals》获得更详细的信息。 如何建立一个可用鼠标拉动的 CScrollView 类 在 CIS 上从 MSMFC 库下载 AUTOSV.LZH。这个程序告诉你如何实现一个辅助消息循环来管理 鼠标的活动,并提供了钩挂来对代码进行定制。这是一个
免费软件。 一定要用视图/文档结构吗? MFC 并不一定要求你使用文档/视图结构。查看 HELLO、 MDI 和 HELLOAPP 例子―它们就没 有用那种结构。大多数 MFC 特性都可以在非文档/视图应用程序中得到运用。但是当你不用 文档 / 视图结构时,你确实会失去一些特性,例如打印预览和许多 OLE 特性。 如何得到当前文档? 请详细参阅"如何得到当前视图?"章节。
文档何时被析构
?
在 SDI 程序中,程序退出后
文档就被删除。在 MDI 程序中,与该文档相关的最后一个视图关 闭时文档就被删除。 为了在 SDI 和 MDI 中同时用这个文档, 你应该在虚函数 DeleteContents() 函数中删除该文档的数据,而不是在析构器中。 如何建立多文档? 为 了 加 入 对 附 加 文 档 类 型 的 支 持 , 你 可 以 在 CWinApp 派 生 类 中 创 建 和 注 册 附 加 CmultiDocTemplate 对象。这种方法已经在 MULTDOCS 样例程序中得以说明。将一个附加文 档类型加入到 MFC 程序的一般步骤如下: 用 AppWizard 来创建一个新的文档类和视图类。 用资源编辑器增加新的资源字串来支持新的文档类。 要想知道关于文档样板字符串格式的更 多内容,请参阅"如何理解文档样板字符串"。 用资源编辑器增加附加的应用程序图标和菜单资源。注意,这些资源中每一个的 ID 都必须 与在步骤 2 中创建的文档模板字符串的 ID 是相同的。这个 ID 被 CmultiDocTemplate 类用来 识别与附加文档类型相关的资源。 在应用程序的 InitInstance()函数中,创建了另一个 CMultiDocTemplate 对象并且用 CWinApp::AddDocTemplate()函数来
注册。例如: CMultiDocTemplate* pDocTemplate2 = new CMultiDocTemplate( IDR_DOC2TYPE, RUNTIME_CLASS(CDoc2), RUNTIME_CLASS(CMDIChildWnd),RUNTIME_CLASS(CView2)); AddDocTemplate(pDocTemplate2); 最后,将定制的序列化和绘图代码加入到你的新文档和视图类中。 如何得到一个打开文档的列表? 下面的程序段指明如何得到用 CDocTemplate 对象建立的所有文档的指针
列表。 下面的程序段中, CMyApp 由 CWinApp 派生而来。 变量 m_templateList 是一个 CPtrList 对象, 它 是 CwinApp 的 成 员 变 量 , 包 含 一 个 所 有 文 档 模 板 指 针 的 列 表 。 文 档 模 板 函 数 GetFirstDocPosition()和 GetNextDoc()被用来在文档模板列表中进行迭代来得到每一个文档模 板。 void CMyApp::GetDocumentList(CObList * pDocList) { ASSERT(pDocList->IsEmpty()); POSITION pos = m_templateList.GetHeadPosition(); while (pos) { CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetNext(pos);
POSITION pos2 = pTemplate->GetFirstDocPosition(); while (pos2) { CDocument * pDocument; if ((pDocument=pTemplate->GetNextDoc(pos2)) != NULL) pDocList->AddHead(pDocument); } } }
在参考手册或在线帮助中,有两个 CdocTemplate 类的公共成员函数没有被说明。