MFC文档类程序各个类之间指针相互获取
2013-06-14 11:09
246 查看
1) 在View中获得Doc指针
CYouSDIDoc *pDoc=GetDocument();一个视只能有一个文档。
也可以: CMainFrame *pMain =(CMainFrame *)AfxGetMainWnd();
CyouView *pView=(CyouView *)pMain->GetActiveView();
CToolBar * pToolBar=(CtoolBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);
(CMainFrame *)GetParent()->m_wndStatusBar;
特别是文字处理CEditView当产生多个视图类时,这个功能是非常需要的。
CDocument类提供了两个函数用于视图类的定位:
GetFirstViewPosition()和GetNextView()
virtual POSITION GetFirstViewPosition() const;
virtual CView* GetNextView(POSITION& rPosition) const;
注意:GetNextView()括号中的参数用的是引用方式,因此执行后值可能改变。
GetFirstViewPosition()用于返回第一个视图位置(返回的并非视图类指针,而是一
个POSITION类型值),GetNextView()有两个功能:返回下一个视图类的指针以及用
引用调用的方式来改变传入的POSITION类型参数的值。很明显,在Test程序中,只有
一个视图类,因此只需将这两个函数调用一次即可得到CTestView的指针如下(需定
义一个POSITION结构变量来辅助操作):
CTestView* pTestView;
POSITION pos=GetFirstViewPosition();
pTestView=GetNextView(pos);
这样,便可到了CTestView类的指针pTestView.执行完几句后,变量pos=NULL,因为没
有下一个视图类,自然也没有下一个视图类的POSITION.但是这几条语句太简单,不
具有太强的通用性和安全特征;当象前面说的那样,当要在多个视图为中返回某个指
定类的指针时,我们需要遍历所有视图类,直到找到指定类为止。判断一个类指针指
向的是否某个类的实例时,可用IsKindOf()成员函数时行检查,如:
pView->IsKindOf(RUNTIME_CLASS(CTestView));
即可检查pView所指是否是CTestView类。
CYouSDIDoc *pDoc=GetDocument();一个视只能有一个文档。
2) 在App中获得MainFrame指针
CWinApp 中的 m_pMainWnd变量就是MainFrame的指针也可以: CMainFrame *pMain =(CMainFrame *)AfxGetMainWnd();
3) 在View中获得MainFrame指针
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;4) 获得View(已建立)指针
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd;CyouView *pView=(CyouView *)pMain->GetActiveView();
5) 获得当前文档指针
CDocument * pCurrentDoc =(CFrameWnd *)m_pMainWnd->GetActiveDocument();6) 获得状态栏与工具栏指针
CStatusBar * pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);CToolBar * pToolBar=(CtoolBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);
7) 如果框架中加入工具栏和状态栏变量还可以这样
(CMainFrame *)GetParent()->m_wndToolBar;(CMainFrame *)GetParent()->m_wndStatusBar;
8) 在Mainframe获得菜单指针
CMenu *pMenu=m_pMainWnd->GetMenu();9) 在任何类中获得应用程序类
用MFC全局函数AfxGetApp()获得。10) 从文档类取得视图类的指针
从文档获得视图类指针目的一般为了控制同一文档的多个视图的定位问题,我的体会特别是文字处理CEditView当产生多个视图类时,这个功能是非常需要的。
CDocument类提供了两个函数用于视图类的定位:
GetFirstViewPosition()和GetNextView()
virtual POSITION GetFirstViewPosition() const;
virtual CView* GetNextView(POSITION& rPosition) const;
注意:GetNextView()括号中的参数用的是引用方式,因此执行后值可能改变。
GetFirstViewPosition()用于返回第一个视图位置(返回的并非视图类指针,而是一
个POSITION类型值),GetNextView()有两个功能:返回下一个视图类的指针以及用
引用调用的方式来改变传入的POSITION类型参数的值。很明显,在Test程序中,只有
一个视图类,因此只需将这两个函数调用一次即可得到CTestView的指针如下(需定
义一个POSITION结构变量来辅助操作):
CTestView* pTestView;
POSITION pos=GetFirstViewPosition();
pTestView=GetNextView(pos);
这样,便可到了CTestView类的指针pTestView.执行完几句后,变量pos=NULL,因为没
有下一个视图类,自然也没有下一个视图类的POSITION.但是这几条语句太简单,不
具有太强的通用性和安全特征;当象前面说的那样,当要在多个视图为中返回某个指
定类的指针时,我们需要遍历所有视图类,直到找到指定类为止。判断一个类指针指
向的是否某个类的实例时,可用IsKindOf()成员函数时行检查,如:
pView->IsKindOf(RUNTIME_CLASS(CTestView));
即可检查pView所指是否是CTestView类。
相关文章推荐
- MFC工程中,各个类之间相互获取指针
- MFC View类对话框类之间指针的相互获取
- 文档类程序各个类之间的相互访问关系
- MFC中获取各个窗口(对话框)之间的指针、对象、句柄
- 视图类 文档类 框架类 应用程序类之间指针的互相获取
- MFC中获取各个窗体之间的句柄或者指针对象的方法
- MFC中视图类、框架类、文档类之间句柄指针的转换(待完善)
- MFC获取各个窗口(体)之间的指针(对象)
- MFC获取各个窗口(体)之间的指针(对象)
- MFC获取文档 视图 程序 框架类的指针
- MFC获取各个窗口(体)之间的指针(对象)
- 完成一程序演示字符数组、C风格字符串、std::string和MFC中的Cstring类型之间的相互转换
- MFC中获取各个窗口之间的句柄或者指针对象的方法
- MFC中 文档、视图、框架、应用各类直接指针的相互获取
- MFC获取各个窗口(体)之间的指针(对象)
- MFC初学者:MFC程序中类之间的相互访问的常规方法。
- 视图类 文档类 框架类 应用程序类之间指针的互相获取
- MFC中获取各个窗口(对话框)之间的指针、对象、句柄
- mfc可执行程序之间的相互调用
- MFC框架类、文档类、视图类相互访问(及窗口句柄获取)的方法