zoukankan      html  css  js  c++  java
  • MFC框架类、文档类、视图类相互访问的方法

    1、获取应用程序指针 

    CMyApp* pApp=(CMyApp*)AfxGetApp();

    2、获取主框架指针 
    CWinApp 中的公有成员变量 m_pMainWnd 就是主框架的指针 
    CMainFrame* pMainFrame = (CMainFrame*)(AfxGetApp()->m_pMainWnd); 
    或者 
    CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();

    3、获取菜单指针 
    CMenu* pMenu = AfxGetMainWnd()->GetMenu();

    4、获取工具栏、状态栏指针 
    主框架中可以直接使用m_wndToolBar、m_wndStatusBar 
    其他:

    CToolBar* pToolBar = (CToolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR); 
    CStatusBar* pStatusBar = (CStatusBar*)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);

    5、获取控件指针 
    先用 GetDlgItem() 再转换,如:

    CButton* pButton = (CButton*)GetDlgItem(IDC_MYBUTTON);

    6、通过框架获取文档、视图指针

    SDI: 
    CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd(); 
    CYourDoc* pDoc = (CYourDoc*)pMainFrame->GetActiveDocument(); 
    CYourView* pView = (CYourView*)pMainFrame->GetActiveView();

    MDI: 
    CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd(); 
    CChildFrame* pChildFrame = (CChildFrame*)pMainFrame->GetActiveFrame(); 
    CYourDoc* pDoc = (CYourDoc*)pChildFrame->GetActiveDocument(); 
    CYourView* pView = (CYourView*)pChildFrame->GetActiveView();

    7、文档、视图

    从视图获取文档指针: 
    CYourDoc* pDoc = GetDocument();

    从文档获取视图指针: 
    利用成员函数 GetFirstViewPosition() 和 GetNextView() 遍历 
    virtual POSITION GetFirstViewPosition() const; 
    virtual CView* GetNextView(POSITION& rPosition) const;

    SDI: 
    CYourView* pView; 
    POSITION pos = GetFirstViewPosition(); 
    pView = GetNextView(pos);

    MDI:

    定义函数 
    CView* CYourDoc::GetView(CRuntimeClass* pClass)

    {

    CView* pView; 
        POSITION pos=GetFirstViewPosition(); 
        while(pos!=NULL) 
        { 
            pView=GetNextView(pos); 
             if(!pView->IsKindOf(pClass)) 
                 break; 
        } 
        if(!pView->IsKindOf(pClass)) 
        { 
            AfxMessageBox("Connt Locate the View."); 
           return NULL; 
        } 
        return pView; 
    }

    使用如下: 
    CYourView* pView=(CYourView*)GetView(RUNTIME_CLASS(CYourView));

    8、文档模版、文档

    从文档获取文档模版指针: 
    CDocTemplate* GetDocTemplate() const;

    从文档模版获取文档指针: 
    viaual POSITION GetFirstDocPosition( ) const = 0; 
    visual CDocument* GetNextDoc(POSITION & rPos) const = 0;

    9、获取分割视图中各个视图的指针

    主框架中定义:CSplitterWnd m_wndSplitter;

    定义两个View类:CView1、CView2

    框架类中重载: 
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT, CCreateContext* pContext) 

        VERIFY(m_splitter.CreateStatic(this,2,1)); //分割成两行一列 
        VERIFY(m_splitter.CreateView(0,0,RUNTIME_CLASS(CView1),CSize(100,100),pContext)); 
        VERIFY(m_splitter.CreateView(1,0,RUNTIME_CLASS(CView2),CSize(100,100),pContext)); 
        return TRUE; 
    }

    获取分割视图指针 
    CView1* pView1 = (CView1*)m_wndSplitter.GetPane(0,0); 
    CView2* pView2 = (CView2*)m_wndSplitter.GetPane(1,0);

    10、通过鼠标获得子窗口指针

    CWnd* ChildWindowFromPoint(POINT point) const; 
    CWnd* ChildWindowFromPoint(POINT point,UINT nFlags) const; 
    用于确定包含指定点的子窗口 
    如果指定点在客户区之外,函数返回NULL; 
    如果指定点在客户区内,但是不属于任何一个子窗口,函数返回该CWnd的指针; 
    如果有多个子窗口包含指定点,则返回第一个子窗口的指针。 
    还要注意的是,该函数返回的是一个伪窗口指针,不能将它保存起来供以后使用。 
    对于第二个参数nFlags有几个含义: 
    CWP_ALL             file://不忽略任何子窗口 
    CWP_SKIPNIVSIBLE    file://忽略不可见子窗口 
    CWP_SKIPDISABLED    file://忽略禁止的子窗口 
    CWP_SKIPRANSPARENT file://忽略透明子窗口

  • 相关阅读:
    [POJ3111]K Best(分数规划, 二分)
    [Python]实现简单决策树
    HDU 1269.迷宫城堡-Tarjan or 双向DFS
    HDU 2586.How far away ?-在线LCA(ST)-代码很认真的写了注释(捞到变形)
    HDU 5727.Necklace-二分图匹配匈牙利
    ZOJ 3593.One Person Game-扩展欧几里得(exgcd)
    牛客网 牛客小白月赛2 H.武-最短路(Dijkstra)
    牛客网 牛客小白月赛2 G.文
    牛客网 牛客小白月赛2 E.是是非非-尼姆博奕
    牛客网 牛客小白月赛2 D.虚虚实实-无向图判欧拉路径
  • 原文地址:https://www.cnblogs.com/BBOOT/p/3771432.html
Copyright © 2011-2022 走看看