Visual c++ CDocTemplate和m_templateList

Visual c++ CDocTemplate和m_templateList,visual-c++,mfc,Visual C++,Mfc,我正在使用MFC将VC++中的一些软件从16位升级到32位,我知道在MFC的最新版本中,我无法再访问CDOctTemplate中的m_templateList,我必须使用GetFirstDoctTemplatePosition和GetNextDoctTemplate。就枚举模板而言,这没有问题(只有在存在多个模板的情况下才会打开对话框)。我的问题是,什么样的方法可以最好地绕过这样一个事实:对模板列表的引用当前正在传递给创建时的对话框,并且正在返回所选模板?代码如下: void CMtApp::O

我正在使用MFC将VC++中的一些软件从16位升级到32位,我知道在MFC的最新版本中,我无法再访问
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替换现有代码。再次感谢。