在MDI中如何打开指定的文档视图

做了个MDI程序,其中有几种文档/视图,如其中一个是:CMDI_My_Doc1   /   CMDI_My_View1
我想手动打开某新建一个文档视图,但目前只有OnFileNew的方法,能不能新建立一个我指定的CMDI_My_Doc1来新建文档/视图窗口? 50 

第1个回答
补充一句,OnFileNew的问题在于,需要手动选择文档类型,这个是我想避免的.


第2个回答
CWinApp::OpenDocumentFile,根据不同的扩展名会自动选取文档模板。
如果要新建不同类型文档,跟踪一下OnFileNew里面的代码自己修改就可以了。


第3个回答
在APP的InitInstance函数加这一条;
CMultiDocTemplate*   m_MyDT;
m_MyDT   =new   CMultiDocTemplate(
IDR_MAINFRAME,//这里你自己看情况修改
RUNTIME_CLASS(CMDI_My_Doc1),
RUNTIME_CLASS(CChildFrame),   //   custom   MDI   child   frame
RUNTIME_CLASS(CMDI_My_View1));
AddDocTemplate(m_MyDT);
然后自己写一个函数里面执行下面代码
CMDI_My_Doc1   *pDoc=(CMDI_My_Doc1   *)m_MyDT-> CreateNewDocument();//创建新文档
if(pDoc==NULL)
return   ;
m_pSource=pDoc;
CFrameWnd   *pFrame=m_MyDT-> CreateNewFrame(pDoc,NULL);//创建新窗口
if(pFrame==NULL)
return   ;
m_MyDT-> InitialUpdateFrame(pFrame,pDoc);//显示新窗口


第4个回答
mark


第5个回答
楼上的直接调用模版CreateNewDocument函数也可以

下面的方法可能灵活一些,调用模版类的OpenDocumentFile函数,其中参数为NULL表示新建文档,如果包含文件名则打开文档。

BOOL   CTTApp::InitInstance()
{
...
CMultiDocTemplate*   pDocTemplate1;
pDocTemplate1   =   new   CMultiDocTemplate(
IDR_TTTYPE,
RUNTIME_CLASS(CTTDoc1),
RUNTIME_CLASS(CChildFrame),   //   custom   MDI   child   frame
RUNTIME_CLASS(CTTView1));
AddDocTemplate(pDocTemplate1);

CMultiDocTemplate*   pDocTemplate2;
pDocTemplate2   =   new   CMultiDocTemplate(
IDR_TTTYPE,
RUNTIME_CLASS(CTTDoc2),
RUNTIME_CLASS(CChildFrame),   //   custom   MDI   child   frame
RUNTIME_CLASS(CTTView2));
AddDocTemplate(pDocTemplate2);

//   create   main   MDI   Frame   window
CMainFrame*   pMainFrame   =   new   CMainFrame;
if   (!pMainFrame-> LoadFrame(IDR_MAINFRAME))
return   FALSE;
m_pMainWnd   =   pMainFrame;


pDocTemplate2-> OpenDocumentFile(NULL);   //   NULL表示新建文档

//   The   main   window   has   been   initialized,   so   show   and   update   it.
pMainFrame-> ShowWindow(m_nCmdShow);
pMainFrame-> UpdateWindow();