MFC指针获取全攻略:从View到Doc,从MainFrame到更多

需积分: 9 2 下载量 162 浏览量 更新于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)和实践,可以更深入地理解这些概念并解决实际问题。