WEB开发网
开发学院软件开发VC VC和MFC的一些常见问题 阅读

VC和MFC的一些常见问题

 2010-07-25 20:46:33 来源:WEB开发网   
核心提示:如何得到当前文档?请详细参阅"如何得到当前视图?"章节,文档何时被析构?在SDI程序中,VC和MFC的一些常见问题(4),程序退出后文档就被删除,在MDI程序中,它是CwinApp的成员变量,包含一个所有文档模板指针的列表,与该文档相关的最后一个视图关闭时文档就被删除,为了在SDI和MDI中同时用这

如何得到当前文档?

请详细参阅"如何得到当前视图?"章节。

文档何时被析构?

在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);
     }
   }
 }

上一页  1 2 3 4 5  下一页

Tags:VC MFC 一些

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接