• MFC多视图共用一文档实现


        项目过程中有定制视图的需求,具体为打开程序默认双视图并且共用一个文档。在网上找了许多类似的资料,都不尽完善。本文直接从达到目的的角度叙述,实现原理不再多说。

        1.在自己的App类中定义public变量

    CMultiDocTemplate * m_pDocTemplate;
    
    CMultiDocTemplate * m_pNewDocTemplate;

    然后在App类中 Initlnstance找到RUNTIME_CLASS代码段,在之后加上

    m_pNewDocTemplate=new CMultiDocTemplate(IDR_PracTrain_HotelTYPE,
    RUNTIME_CLASS(CPracTrain_HotelDoc),
    RUNTIME_CLASS(CChildFrame),
    RUNTIME_CLASS(CPracTrain_HotelView));
    AddDocTemplate(m_pNewDocTemplate);

    其中各类名对应自己的工程中的类名。

         2.在App类中重载OnFileNew

    首先在头文件中定义afx_msg void OnFileNew();

    然后修改消息映射ON_COMMAND(ID_FILE_NEW,OnFileNew)

    最后在重载的函数中贴上代码

    POSITION ps=m_pDocManager->GetFirstDocTemplatePosition();
    CDocTemplate *pDocTemplate=m_pDocManager->GetNextDocTemplate(ps);
    pDocTemplate->OpenDocumentFile(NULL);

        3.在Doc类中重载OnNewDocument

    在Doc类中重载函数afx_msg CFrameWnd* EkCreateNewWindow( CDocTemplate* pTemplate,CDocument* pDocument )

    在OnNewDocument中贴上

    CPracTrain_HotelApp*p_app = (CPracTrain_HotelApp*)AfxGetApp();
    EkCreateNewWindow(p_app->m_pNewDocTemplate, this ); 

    在MainFrm.cpp末加上

    CFrameWnd* CPracTrain_HotelDoc::EkCreateNewWindow( CDocTemplate* pTemplate,CDocument* pDocument )
    {
        ASSERT_VALID( pTemplate );   
        ASSERT_VALID( pDocument );   
        CFrameWnd* pFrame =    
            pTemplate->CreateNewFrame(pDocument, NULL ); 
        CRect rect;
        GetClientRect(pFrame->m_hWnd,&rect);
        pFrame->MoveWindow(100,150,rect.Width(),rect.Height());
        if( pFrame == NULL )   
        {TRACE0( "Warning: failed to create new frame.
    " );   
        return NULL;   
        }   
        ASSERT_KINDOF( CFrameWnd, pFrame );   
        pTemplate->InitialUpdateFrame( pFrame, pDocument );   
    
        return pFrame;  
    }

    编译完成就达到需求效果了。

  • 相关阅读:
    201671030116宋菲菲 实验三作业互评与改进报告
    通读《构建之法》提出问题
    201671010460-朱艺璇-实验四附加实验
    201671010460朱艺璇 词频统计软件项目报告
    201671010460朱艺璇 实验三作业互评与改进报告
    阅读《现代软件工程—构建之法》提出的问题
    手把手带你了解消息中间件(3)——RocketMQ
    字符编码的历史由来
    linux常用命令
    linux各目录及重要目录的详细介绍
  • 原文地址:https://www.cnblogs.com/jshan/p/3281773.html
Copyright © 2020-2023  润新知