取到View类视图中的指针,应该先获取Doc文档中的指针;具体思路: 主框架CMainFrame中获取Doc指针,接着Doc文档框架中获取View视图的指针,继而可以实现CMainFrame框架获取View视图指针。 根据上述思路来撰写代码;
时间: 2024-09-15 10:06:54 浏览: 8
在MFC(Microsoft Foundation Classes)框架中,如果你想要从`CMainFrame`类中获取`CDoc`类的实例并进一步获取`CView`类的指针,你可以按照这样的步骤:
```cpp
// 在CMainFrame类中
CMFCCmdTarget* pCmdTarget = dynamic_cast<CMFCCmdTarget*>(AfxGetMainWnd()); // 获取顶级窗口句柄
if (pCmdTarget)
{
CDocument* pDoc = pCmdTarget->m_pActiveDocument; // 获取当前活动文档
if (pDoc) // 检查是否已创建文档
{
CView* pView = pDoc->GetActiveView(); // 获得活动视图
// 现在你可以使用pView指针访问或操作视图了
}
}
```
这里我们首先将顶层窗口转换为`CMFCCmdTarget`类型的指针,然后通过它找到`CDocument`的指针。`CDocument`通常会有一个指向其关联`CView`的指针,我们可以调用`GetActiveView()`来获取活跃的视图。
相关问题
vc中如何在view类中用CMainFrame*
在 VC 中,可以通过以下步骤在 view 类中使用 `CMainFrame` 类型的指针:
1. 在 view.h 文件中包含 CMainFrame.h 文件。
2. 在 view 类中添加一个成员变量,类型为 `CMainFrame*`。
```
#include "CMainFrame.h"
class CMyView : public CView
{
public:
// ...
CMainFrame* m_pMainFrame;
};
```
3. 在 view 类的构造函数中,给成员变量 `m_pMainFrame` 赋值。
```
CMyView::CMyView()
{
// ...
m_pMainFrame = (CMainFrame*)AfxGetMainWnd();
}
```
这里使用 `AfxGetMainWnd()` 函数获取主窗口的指针,并将其转换为 `CMainFrame*` 类型。
现在,你就可以在 view 类中使用 `m_pMainFrame` 指针调用主窗口中的成员函数或变量了。
MFC文档类程序怎么直接拿到某个类的指针
如果在MFC文档类程序中需要获取某个类的指针,可以采用以下方式:
1. 如果目标类是文档类的成员变量,可以通过文档类对象访问该成员变量的指针,例如:
```cpp
CMyDoc* pDoc = GetDocument();
CMyClass* pClass = pDoc->m_pMyClass;
```
2. 如果目标类是视图类的成员变量,可以通过视图类对象访问该成员变量的指针,例如:
```cpp
CMyView* pView = GetActiveView();
CMyClass* pClass = pView->m_pMyClass;
```
3. 如果目标类是应用程序类的成员变量,可以通过应用程序类对象访问该成员变量的指针,例如:
```cpp
CMyApp* pApp = AfxGetApp();
CMyClass* pClass = pApp->m_pMyClass;
```
4. 如果目标类不是文档类、视图类或应用程序类的成员变量,可以使用全局函数 AfxGetApp 或 AfxGetMainWnd 获取应用程序类对象或主窗口对象,再通过该对象访问目标类的指针,例如:
```cpp
CMyApp* pApp = AfxGetApp();
CMyClass* pClass = pApp->m_pMyClass;
```
```cpp
CMainFrame* pMainFrame = (CMainFrame*)AfxGetMainWnd();
CMyClass* pClass = pMainFrame->m_pMyClass;
```
需要注意的是,以上方法都要求目标类的指针是公共成员变量,否则无法直接访问。如果目标类的指针是私有成员变量,可以使用类的成员函数来获取该指针。