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;  
    }

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

  • 相关阅读:
    colemak,你用了吗?
    DELPHI一个对付内存汇漏的办法和技巧
    使用for in 循环数据集
    今天差点被断电搞死了,幸好IDE的备份救了我
    为什么继续选择DELPHI?
    无缘DELPHI的BUG
    DELPHI DOUBLE不解之迷
    失败的大牛事件委托,与我的委托
    2017-02-08 01:19:09 Scrapy: pk5_mylist
    2016-09-02 16:50:15 webqq 协议分析
  • 原文地址:https://www.cnblogs.com/jshan/p/3281773.html
Copyright © 2011-2022 走看看