MFC 中获取各种类指针的方法
获得各种视图指针如下
1) 在 View 中获得 Doc 指针
2) 在 App 中获得 MainFrame 指针
3) 在 View 中获得 MainFrame 指针
4) 获得 View (已建立)指针
5) 获得当前文档指针
6) 获得状态栏与工具栏指针
7) 获得状态栏与工具栏变量
8) 在 Mainframe 获得菜单指针
9) 在任何类中获得应用程序类
10) 从文档类取得视图类的指针 (1)
11) 在 App 中获得文档模板指针
12) 从文档模板获得文档类指针
13) 在文档类中获得文档模板指针
14) 从文档类取得视图类的指针 (2)
15) 从一个视图类取得另一视图类的指针
16) 获取分割视图中各个视图的指针
VC 中编程对于刚刚开始学习的同学,最大的障碍和问题就是消息机制和指针获取与操作。其实这
些内容基本上是每本 VC 学习工具书上必讲的内容,而且通过 MSDN 很多问题都能解决。 下面文字
主要是个人在编程中指针使用的一些体会,说的不当的地方请指正。 一般我们使用的框架是 VC 提
供的 Wizard 生成的 MFC App Wizard(exe) 框架,无论是多文档还是单文档,都存在指针获取和操
作问题。 下面这节内容主要是一般的框架,然后再讲多线程中的指针使用。使用到的类需要包含
响应的头文件。首先一般获得本类 ( 视,文档,对话框都支持 ) 实例指针 this ,用 this 的目的,主要
可以通过类中的函数向其他类或者函数中发指针,以便于在非本类中操作和使用本类中的功能。
1 ) 在 View 中获得 Doc 指针
CYouSDIDoc *pDoc=GetDocument(); 一个视只能有一个文档。
2) 在 App 中获得 MainFrame 指针
CWinApp 中的 m_pMainWnd 变量就是 MainFrame 的指针 也可以: CMainFrame *pMain =(CMainFrame *)AfxGetMainWnd();
3) 在 View 中获得 MainFrame 指针
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd; or ((CMainFrame *)GetParent())->
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. 但是这几条
语句太简单,不具有太强的通用性和安全特征;当象前面说的那样,当要在多个视图为中返回某个
指定类的指针时,我们需要遍历所有视图类,直到找到指定类为止。判断一个类指针指向的是否某
个