zoukankan      html  css  js  c++  java
  • 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;  
    }

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

  • 相关阅读:
    整数反转
    两数之和
    设计模式-备忘录模式
    设计模式-迭代器模式
    设计模式-中介者模式
    设计模式-观察者模式
    C# OpenFileDialog和SaveFileDialog的常见用法
    SQL数据库表结构的修改(sql2005)
    C# 时间格式处理
    C# 集合类(四)
  • 原文地址:https://www.cnblogs.com/jshan/p/3281773.html
Copyright © 2011-2022 走看看