【交互】MFC各个类之间相互访问分析

来源:互联网 发布:淘宝网潮男装 编辑:程序博客网 时间:2024/04/28 08:38

一、访问分析

     
    

1、MDI框架(CMainFrame)调用,CFrameWnd::GetActiveDocument可获得与当前活动的视相关联的活动文档pDocument

2、CFrameWnd::GetActiveView调用,如果是MDI窗口(CMainFrame),则返回NULL,其可以通过调用MDIGetActive找到活动的MDI子窗口,然后找到该子窗口(CChildFrame)的活动视图

3、MDI框架调用CFrameWnd::GetActiveFrame,获得当前活动CChildFrame窗口指针,该函数里面调用了MDIGetActive,然后向CMDIFrameWnd::m_hWndMDIClient发送WM_MDIGETATIVE消息,(CMDIChildWnd*)CWnd::FromHandlePermanent(hWnd)得到对象。

4、CDMIChildWnd调用GetMDIFrame获得MDI框架窗口

5、CWinApp调用AfxGetMainWnd得到应用程序theApp的m_pMainWnd对象指针

二、实例分析

      1、 切分窗口实现

              用在CMDIChildWnd派生一个子窗口,中声明CSplitterWnd m_Splitter中,CSplitterWnd::CreateView,new 一个pView,然后把CChildFrame对象指针传给pView->Create(..this..)作为父窗口。

    m_Splitter.CreateStatic(this,1,2);//1行2列     m_Splitter.CreateView(0,0,..);//第1行,第1列    m_Splitter2.CreateStatic(&m_Splitter , 2 , 1 , ... m_Splitter.IdFromRowCol(0,1));//在m_Splitter的基础上第一行,第2列,在创建

           

     

  2、MFC的视图View【5、6】

        单文档CMainFrame当中,做了这样的设置:这边没有将pView加入到文档中,所以无法获取pDocument。

       

  3、MFC—文档视图 
        多文档中,其他都派生,在class CDrawApp : CWinApp的初始化中,重新定义了一个菜单资源IDR_MFCMDITYPE

CDrawApp::InitInstance(){CMultiDocTemplate *pTemplate = new CMultiDocTemplate(        IDR_MFCMDITYPE,         RUNTIME_CLASS(CDrawDoc),         RUNTIME_CLASS(CDrawChildFrm),        RUNTIME_CLASS(CDrawView)        );    AddDocTemplate(pTemplate);    //创建主窗口    CMainFrm* pMainFrm = new CMainFrm();    pMainFrm->LoadFrame(IDR_MAINFRAME);    m_pMainWnd = pMainFrm;   //默认新建一个文档子窗口    OnFileNew();   //显示主窗口

    pMainFrm->ShowWindow(m_nCmdShow);

    pMainFrm->UpdateWindow();

    return TRUE; 

}

参考:1、MFC多文档多视图编程
2、文档/视图结构中的各个部分是如何联系到一起的
3、MFC文档视图结构 各个互访方式
4、MFC指针的获取
5、MFC的视图View
6、MFC—文档视图
7、在MFC类中各种类的指针的获取和应用
8、mfc获得各个类的句柄

原创粉丝点击