转载地址:http://cache.baiducontent.com/c?m=9f65cb4a8c8507ed4fece763104687270e54f7327d818c027fa3cf1fd5791d1c053db2fa3a211b02d0d1393a41f9460dbcad6734605c62e9c88edf5ddccb85295c9f2644671df55613a346fc8d177f977dc11ca2ed4e&p=8a3ec54ad6c345f042be9b7c5c0a97&newp=937ad45e86cc41af5ca6c7710f00cc231610db2151d7db1134&user=baidu&fm=sc&query=CDocTemplate%3A%3AMatchDocType&qid=&p1=3
在OnInitInstance()中加入文档模板
AddDocTemplate(pYoutemplate)
重载CWinApp::OpenDocumentFile(LPCSTSRT lpszFileName)
代码如下
CString str=lpszFileName;
CString strFileName=lpszFileName;
str.MakeUpper();
CString strExt=str.Mid(str.GetLength()-3,3);
POSITION temppos=GetFirstDocTemplatePosition();
CString strTemp;
strExt="."+strExt;
CDocTemplate * pDocTemplateTmp=NULL;
CDocument * pOpenDocument;
BOOL bOpen=FALSE;
while(temppos!=NULL)
{
CDocTemplate *pDocTemplate=GetNextDocTemplate(temppos);
pDocTemplate->GetDocString(strTemp,CDocTemplate::filterExt);
strTemp.MakeUpper();
if(strTemp.CompareNoCase(".VTC")==0)
pDocTemplateTmp=pDocTemplate;
if(strExt==strTemp)
{
if(pDocTemplate->MatchDocType(lpszFileName, pOpenDocument)==CDocTemplate::yesAlreadyOpen)
{
POSITION pos = pOpenDocument->GetFirstViewPosition();
if (pos != NULL)
{
CView* pView = pOpenDocument->GetNextView(pos); // get first one
ASSERT_VALID(pView);
CFrameWnd* pFrame = pView->GetParentFrame();
if (pFrame != NULL)
pFrame->ActivateFrame();
else
TRACE0("Error: Can not find a frame for document to activate.\n");
CFrameWnd* pAppFrame;
if (pFrame != (pAppFrame = (CFrameWnd*)AfxGetApp()->m_pMainWnd))
{
ASSERT_KINDOF(CFrameWnd, pAppFrame);
pAppFrame->ActivateFrame();
}
}
else
{
TRACE0("Error: Can not find a view for document to activate.\n");
}
return pOpenDocument;
}
else
return pDocTemplate->OpenDocumentFile(strFileName);
}
}
if(pDocTemplateTmp!=NULL)
{
if(pDocTemplateTmp->MatchDocType(lpszFileName, pOpenDocument)==CDocTemplate::yesAlreadyOpen)
{
POSITION pos = pOpenDocument->GetFirstViewPosition();
if (pos != NULL)
{
CView* pView = pOpenDocument->GetNextView(pos); // get first one
ASSERT_VALID(pView);
CFrameWnd* pFrame = pView->GetParentFrame();
if (pFrame != NULL)
pFrame->ActivateFrame();
else
TRACE0("Error: Can not find a frame for document to activate.\n");
CFrameWnd* pAppFrame;
if (pFrame != (pAppFrame = (CFrameWnd*)AfxGetApp()->m_pMainWnd))
{
ASSERT_KINDOF(CFrameWnd, pAppFrame);
pAppFrame->ActivateFrame();
}
}
else
{
TRACE0("Error: Can not find a view for document to activate.\n");
}
return pOpenDocument;
}
else
return pDocTemplateTmp->OpenDocumentFile(strFileName);
}