【MFC】多文档窗口实现现实多个不同的view窗口

tech2022-09-24  109

一、在InitInstance函数中添加多个文档模板

m_pTemplateSchematicView = new CMultiDocTemplate(IDR_CTEMATYPE,         RUNTIME_CLASS(CCTEMADoc),         RUNTIME_CLASS(CChildFrame), // 自定义 MDI 子框架         RUNTIME_CLASS(CCTEMAView));     if (!m_pTemplateSchematicView)         return FALSE;     AddDocTemplate(m_pTemplateSchematicView);

    m_pTemplateDataView=new CMultiDocTemplate(         IDR_CTEMATYPE,         RUNTIME_CLASS(CCTEMADoc),         RUNTIME_CLASS(CChildFrame),         RUNTIME_CLASS(CDataView));     AddDocTemplate(m_pTemplateDataView);

 

二、添加菜单命令处理函数,打开窗体

void CCTEMAApp::OnNew1() {     // TODO: 在此添加命令处理程序代码     m_pTemplateDataView->OpenDocumentFile(NULL);

}

void CCTEMAApp::OnNew2() {     // TODO: 在此添加命令处理程序代码     m_pTemplateSchematicView->OpenDocumentFile(NULL); }

三、处理Doc类的OnNewDocument函数

添加私有函数

 

    CFrameWnd * CreateNewWindow(CDocTemplate *pTemplate,CDocument *pDocument)     {         ASSERT_VALID(pTemplate);         ASSERT_VALID(pDocument);         CFrameWnd* pFrame=pTemplate->CreateNewFrame(pDocument,NULL);         if(pFrame==NULL)         {

            TRACE0("Warning:failed to create new frame.\n");             return NULL;         }         CRect rect;         GetClientRect(pFrame->m_hWnd,&rect);         pFrame->MoveWindow(0,0,rect.Width(),rect.Height());         ASSERT_KINDOF(CFrameWnd,pFrame);         pTemplate->InitialUpdateFrame(pFrame,pDocument);         return pFrame;

             }

BOOL CCTEMADoc::OnNewDocument() {     if (!CDocument::OnNewDocument())         return FALSE;

    // TODO: 在此添加重新初始化代码     // (SDI 文档将重用该文档)

    CCTEMAApp * p_app=(CCTEMAApp*)AfxGetApp();     CreateNewWindow(p_app->m_pTemplateSchematicView,this);     CreateNewWindow(p_app->m_pTemplateDataView,this);

    return TRUE; }

 

 

最新回复(0)