MFC指针获取全攻略:从View到Doc,从MainFrame到更多
需积分: 9 39 浏览量
更新于2024-10-15
收藏 33KB DOC 举报
"MFC各类指针获取的方法"
在MFC(Microsoft Foundation Classes)框架中,指针的使用是实现对象间通信和数据共享的关键。MFC是一个基于C++的类库,它为Windows应用程序开发提供了丰富的接口和工具。在MFC程序中,正确地获取和操作指针对于实现功能和维护代码的逻辑至关重要。以下是一些常见的指针获取方法:
1) **在View中获得Doc指针**:
在MFC中,视图(View)通常与文档(Document)关联。你可以通过调用`GetDocument()`成员函数来获取与当前视图关联的文档指针。例如:
```cpp
CYouSDIDoc*pDoc = GetDocument();
```
2) **在App中获得MainFrame指针**:
`CWinApp`是应用程序类的基类,其中的`m_pMainWnd`成员变量保存了主框架窗口(MainFrame)的指针。可以这样获取:
```cpp
CMainFrame*pMain = (CMainFrame*)AfxGetApp()->m_pMainWnd;
```
或者
```cpp
CMainFrame*pMain = (CMainFrame*)AfxGetMainWnd();
```
3) **在View中获得MainFrame指针**:
视图通常作为主框架窗口的子窗口,可以通过`AfxGetApp()->m_pMainWnd`或`GetParent()`来获取主框架窗口的指针:
```cpp
CMainFrame*pMain = (CMainFrame*)AfxGetApp()->m_pMainWnd;
```
或者
```cpp
CMainFrame*pMain = (CMainFrame*)GetParent();
```
4) **获得View(已建立)指针**:
获取特定的View指针,通常需要知道其类型并从主框架窗口中获取:
```cpp
CMainFrame*pMain = (CMainFrame*)AfxGetApp()->m_pMainWnd;
CYourView*pView = (CYourView*)pMain->GetActiveView();
```
5) **获得当前文档指针**:
在任何地方,都可以通过`AfxGetApp()->GetActiveDocument()`来获取当前活动的文档指针。
6) **获得状态栏与工具栏指针**:
主框架窗口通常拥有状态栏和工具栏,可以通过成员函数获取它们的指针:
```cpp
CStatusBar* pStatusBar = pMain->GetStatusBar();
CToolBar* pToolBar = pMain->GetToolBar();
```
7) **获得状态栏与工具栏变量**:
获取状态栏和工具栏的变量,通常需要访问它们的成员变量,如`m_wndStatusBar`和`m_wndToolBar`。
8) **在Mainframe获得菜单指针**:
通过`GetMenu()`函数获取主框架窗口的菜单指针:
```cpp
CMenu* pMenu = pMain->GetMenu();
```
9) **在任何类中获得应用程序类**:
使用`AfxGetApp()`函数可以直接获取应用程序类(通常是`CWinApp`的派生类)的指针。
10) **从文档类取得视图类的指针**:
文档类通常通过`GetFirstViewPosition()`和`GetNextView()`来获取视图的迭代器,然后通过迭代器获取视图指针。
11) **在App中获得文档模板指针**:
文档模板(CDocTemplate)管理文档、视图和框架窗口之间的关系,可以使用`AfxGetApp()->GetDocTemplate()`。
12) **从文档模板获得文档类指针**:
通过`GetDocumentClass()`获取文档模板所管理的文档类。
13) **在文档类中获得文档模板指针**:
文档类可以通过`GetDocTemplate()`获取与其关联的文档模板。
14) **从文档类取得视图类的指针**:
类似于步骤10,文档类可以通过内部数据结构获取视图指针。
15) **从一个视图类取得另一视图类的指针**:
如果视图之间有特定的关系,可能需要直接访问其他视图,这通常涉及特定的程序设计。
在MFC编程中,理解和掌握这些指针获取方法对于高效地操作对象和实现功能至关重要。在多线程环境中,指针的使用则需要更加谨慎,因为对象的生命周期和线程安全问题需要额外的关注。通过阅读MFC的文档(如MSDN)和实践,可以更深入地理解这些概念并解决实际问题。
2014-04-18 上传
2010-12-18 上传
2021-10-11 上传
2013-01-10 上传
2011-12-21 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2012-07-12 上传
flytobjq
- 粉丝: 0
- 资源: 1
最新资源
- H3C_iNode_PC_7.3_linux E0548
- becquerel:Becquerel是用于分析核光谱测量的Python软件包
- comp_graf_laba1
- glsl-map:将一个范围内的值映射到另一范围内
- 计算机科学知识:计算机基础知识:计算机网络,操作系统,数据库,数据结构与算法,计算机组成原理,软件工程,设计模式,代码外的生存之道,开发常用工具
- arrowdb:用于在所有制造商中查找箭头的数据库
- js代码-js插入新列表时剔除掉全列表已有的项目
- Warpoint:基于团队的2D多人CTH独立游戏
- signsend:Zetakey登录并发送-Webapp。 它使用具有Canvas支持HTML5浏览器(例如Zetakey浏览器www.zetakey.com)捕获签名,并将其发送到电子邮件地址
- 美萍瑜珈管理系统标准版
- vagrant-spree:使用Vagrant的Spree开发环境
- nano-4.0.tar.gz
- let-prove-blocking-queue:以多种方式证明阻塞队列的死锁状态
- albumtrackr:利用ASP.Net Core Web API的Android应用,由Ryan Deering和James Lynam构建
- 剧本
- java代码-编写一个程序判断字符串“Tom”是否在另一个字符串“I am Tom, I am from China”中出现。