单文档中只是想得到当前View类的指针

本文介绍了一种在MFC单文档应用程序中,即使在界面未完全显示时也能获取到View类指针的方法。这有助于开发者在早期阶段访问View组件,解决了使用常规方法可能遇到的断言失败问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

对于MFC的单文档应用程序,在其他的类中我们经常要获取View类的指针,以此来访问View下的public成员。

一般的方法:

   
1 CMainFrame * pMainFrm = (CMainFrame * )AfxGetMainWnd(); 2 CMapGISView * pMapView = (CMapGISView * )pMainFrm -> GetActiveView();

有时用这种方法会存在问题,程序会断言失败。我们来看看GetActiveView()的实现代码:

   
1 CView * CFrameWnd::GetActiveView() const 2 { 3 ASSERT(m_pViewActive == NULL || 4 m_pViewActive -> IsKindOf(RUNTIME_CLASS(CView))); 5 return m_pViewActive; 6 }

我们会发现在界面没有显示出来之前,m_pViewActive始终为NULL。

有时候,我们需要在界面没有出来之前,需要访问View类中的成员。这个时候,我们仅仅是需要一个View类的指针!

通过下列方法可以达到我们的目的:

   
1 CView * CMapGISApp::GetView() 2 { 3 POSITION p = GetFirstDocTemplatePosition(); 4 CDocTemplate * pDocTemplate = GetNextDocTemplate(p); 5 POSITION p1 = pDocTemplate -> GetFirstDocPosition(); 6 CDocument * pDoc = pDocTemplate -> GetNextDoc(p1); 7 POSITION p2 = pDoc -> GetFirstViewPosition(); 8 return pDoc -> GetNextView(p2); 9 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值