Visual c++ CDocTemplate和m_templateList
我正在使用MFC将VC++中的一些软件从16位升级到32位,我知道在MFC的最新版本中,我无法再访问Visual c++ CDocTemplate和m_templateList,visual-c++,mfc,Visual C++,Mfc,我正在使用MFC将VC++中的一些软件从16位升级到32位,我知道在MFC的最新版本中,我无法再访问CDOctTemplate中的m_templateList,我必须使用GetFirstDoctTemplatePosition和GetNextDoctTemplate。就枚举模板而言,这没有问题(只有在存在多个模板的情况下才会打开对话框)。我的问题是,什么样的方法可以最好地绕过这样一个事实:对模板列表的引用当前正在传递给创建时的对话框,并且正在返回所选模板?代码如下: void CMtApp::O
CDOctTemplate
中的m_templateList,我必须使用GetFirstDoctTemplatePosition
和GetNextDoctTemplate
。就枚举模板而言,这没有问题(只有在存在多个模板的情况下才会打开对话框)。我的问题是,什么样的方法可以最好地绕过这样一个事实:对模板列表的引用当前正在传递给创建时的对话框,并且正在返回所选模板?代码如下:
void CMtApp::OnFileNew()
{
CString s;
if (m_templateList.IsEmpty())
{
TRACE0("Error : no document templates registered with CWinApp\n");
AfxMessageBox(AFX_IDP_FAILED_TO_CREATE_DOC);
return;
}
CDocTemplate* pTemplate = (CDocTemplate*)m_templateList.GetHead();
if (m_templateList.GetCount() > 1)
{
// more than one document template to choose from
// bring up dialog prompting user
COpenTypeDlg dlg(&m_templateList);
if (dlg.DoModal() != IDOK)
return; // none - cancel operation
pTemplate = dlg.m_pSelectedTemplate;
pTemplate->GetDocString(s, CDocTemplate::docName);
}
ASSERT(pTemplate != NULL);
ASSERT(pTemplate->IsKindOf(RUNTIME_CLASS(CDocTemplate)));
m_bNew = TRUE;
pTemplate->OpenDocumentFile(NULL);
}
您可以将
CWinApp
传递到对话框的ctor,对话框可以getFirstDoctTemplatePosition
和getNextDoctTemplate
本身。但是您实际上不需要传递CWinApp
,因为对话框可以使用AfxGetApp
来获取它本身
如果您坚持要传递模板列表,那么请根据返回的
GetFirstDoctTemplatePosition
和GetNextDoctTemplate
构建您自己的列表。谢谢。最后,我选择了我认为最简单的选项,并将CWinapp指针作为“this”传递,然后在对话框中使用getFirstDoctTemplatePosition和getNextDoctTemplate替换现有代码。再次感谢。