MFC获取框架,视图,文档指针

一:获取应用程序指针

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

二:获取主框架指针
CWinApp中的共有成员变量m_pMainWnd就是主框架的指针

CMainFrame* pMainFrame=(CMainFrame*)(AfxGetApp()->m_pMainWnd);

或者

CMainFrame* pMainFrame=(CMainFrame*)AfxGetMainWnd();

三:获取菜单指针

CMenu* pMenu=AfxGetMainWnd()->GetMenu();

四:获取工具栏状态栏指针
(1)主框架文件中可以直接使用m_wndToolBar,m_wndStatusBar
(2)其他情况下可通过获得如下获得

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

或者

CFrameWnd* pParent=AFXGetparentFrame(this);
CMFCStatusBar* m_pWndStatus=DYNAMIC_DOWNCAST(CMFCStatusBar,pParent->GetDlgItem(AFX_IDW_STATUS_BAR));

五:获取文档,视图指针

在MDI程序中,主框架窗口CMainFrame没有和任何视图类发生关系,也就是说没有视图类直接属于它,只有子帧窗口类CChildWnd才是所有子窗口视图类的父窗口。而子帧窗口的父窗口才是CFrameWnd。因此,在MDI程序中获得活动视图类的正确方法应为:先获得活动子帧窗口,再从活动子帧窗口中获得活动视图类

SDI:

CMainFrame* pMainFrame=(CMainFrame*)AfxGetMainWnd();
CMyDoc* pDoc=(CMyDoc*)=pMainFrame->GetActiveDocument();
CMyView* pView=(CMyView*)pMianFrame->GetActiveView();

MDI:

CMainFrame* pMainFrame=(CMainFrame*)AfxGetMainWnd();
CChildFrame* pChildFrame(CChildFrame*)pMainFrame->GetActiveFrame();
CMyDoc* pDoc=(CMyDoc*)pChildFrame->GetActiveDocument();
CMyView* pView=(CMyView*)pChildFrame->GetActiveView();

六:文档、视图
从视图中获取文档指针

CMyDoc* pDoc=GetDocument();

从文档中获取视图指针:
利用成员函数GetFirstViewPosition()和GetNextView()遍历

virtual POSITION GetFirstViewPosition()const;
virtual CView* GetNextView(POSITION& rPosition)const;

SDI:

CMyView* pView;
POSITION pos=GetFirstViewPosition();
pView=GetNextView(pos);

MDI:

//定义函数
CView* CMyDoc::GetView(CRuntimeClass* pClass)
{
    CView* pView;
    POSITION pos=GetFirstViewPosition();
    while(pos!=NULL)
    {
        pView=GetNextView(pos);
        if(pView->IsKindOf(pClass))
            break;
    }
    if(!pView->IsKindOf(pClass))
    {
        AfxMessageBox(_T("Cannot Locate the View"));
        return NULL;
    }
    return pView;
}

//使用如下
CMyView* pMyView=(CMyView*)GetView(RUNTIME_CLASS(CMyVIew));

七:文档模板、文档
从文档获取文档模板指针:

CDocTemplate* GetDocTemplate()const;

从文档模板获取文档指针:

virtual POSITION GetFirstDocPosition()const=0;
virtual CDocument* GetNextDoc(POSITION& rPos)const=0;

八:获取分割视图中各个视图的指针
主框架中定义:CSplitterWnd m_wndSplitter;
定义两个View类指针:m_pLeftView,m_pRightView;
框架类中重载:

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
{
    //创建1行2列的分隔窗口
    if(!m_wndSplitter.CreateStatic(this,1,2))
        return FALSE;
    m_wndSplitter.CreateView(0,0,RUNTIME_CLASS(CLeftView),CSize(150,0),NULL);
    m_wndSplitter.CreateView(0,1,RUNTIME_CLASS(CRightView),CSize(0,0),NULL);

    //获取分割视图指针
    m_pLeftView=(CLeftView*)m_wndSplitter.GetPane(0,0);
    m_pRightView=(CRightView*)m_wndSplitter.GetPane(0,1);
    return TRUE;
}

九:通过鼠标获得子窗口指针

CWnd* ChildWindowFromPoint(POINT point)const;
CWnd* ChildWindowFromPoint(POINT point,UINT nFlags)const;

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

十:获取工具条的指针
在缺省状态下,有一个默认的工具条AFX_IDW_TOOLBAR,我们可以根据相应的ID去获取工具条指针

CToolBar* pToolBar=(CToolBar*)AfxGetMainWnd()->GetDescendantWindow(AFX\_IDW\_TOOLBAR);


转载自:http://bbs.csdn.net/topics/390205943
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值