一:获取应用程序指针
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