App,MainFrame等的获得

1  获取应用程序类(App)指针

    在任何类中都可用MFC全局函数AfxGetApp()获得

2 获取框架类(MainFrame)指针

    1)在App中获得MainFrame指针           CWinApp 中的 m_pMainWnd变量就是MainFrame的指针           也可以: CMainFrame *pMain =(CMainFrame *)AfxGetMainWnd();

     2) 在View中获得MainFrame指针

         CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;

3 获取各种视图类(View)指针

    1)(在App,MainFrame,Doc中)获取当前已建立View

          CMainFrame *pMain = (CMainFrame *)AfxGetApp()->m_pMainWnd;           CMyView *pView = (CMyView *)pMain->GetActiveView();

    2)从文档类(Doc)取得视图类(View)的指针----多视

         CDocument类提供了两个函数用于视图类的定位:GetFirstViewPosition()和GetNextView()

         virtual POSITION GetFirstViewPosition() const;          virtual CView* GetNextView(POSITION& rPosition) const;

         例:CTestView* pTestView;    POSITION pos=GetFirstViewPosition();   pTestView=GetNextView(pos);

         为了方便,我们将其作为一个文档类的成员函数,它有一个参数,表示要获得哪个类的指针。实现如下:

CView* CTestDoc::GetView(CRuntimeClass* pClass)

{

CView* pView;

POSITION pos=GetFirstViewPosition();

while(pos!=NULL){

           pView=GetNextView(pos);

           if(!pView->IsKindOf(pClass))

           break;

}

if(!pView->IsKindOf(pClass)){

           AfxMessageBox("Cannot Locate the View!");

           return NULL;

}

return pView;

}

     3)从一个视图类取得另一视图类的指针

           用文档类作中转,先得到文档类的指针,再用文档类的视图定位函数取得另一个视图类。同样,可以实现成一个函数:           (假设要从CTestAView中取得指向其它视图类的指针)

CView* CTestAView::GetView(CRuntimeClass* pClass)

{

CTestDoc* pDoc=(CTestDoc*)GetDocument();

CView* pView;

POSITION pos=pDoc->GetFirstViewPosition();

while(pos!=NULL){

           pView=pDoc->GetNextView(pos);

           if(!pView->IsKindOf(pClass))

           break;

}

if(!pView->IsKindOf(pClass)){

           AfxMessageBox("Cannot Locate the View!");

           return NULL;

}

return pView;

}

     4)获取分割视图中各个视图的指针
CSplitterWnd m_wndSplitter; m_wndSplitter.CreateStatic(this, 1, 2);//分割成一行两列 m_wndSplitter.CreateView(0, 0, RUNTIME_CLASS(CLeftPaneView), CSize(10, 10), pContext); m_wndSplitter.CreateView(0, 1, RUNTIME_CLASS(CRightPaneFrame), CSize(0, 0), pContext); //获取左边视图的两种方法 CLeftPaneView* pLeftPaneView     = (CLeftPaneView*)   m_wndSplitter.GetPane(0,0); //上一句可以用下句代替: //CLeftPaneView* pLeftPaneView = (CLeftPaneView *)GetActiveView(); //获取右边视图

pLeftPaneView->m_pRightPaneFrame = (CRightPaneFrame*) m_wndSplitter.GetPane(0,1);

4 获取各种文档类(Doc)和文档模板类的指针

     1)获得当前文档指针       CDocument * pCurrentDoc = (CFrameWnd *)m_pMainWnd->GetActiveDocument();

     2)从文档模板获得文档类指针

一个文档模板可以有多个文档,每个文档模板都保留并维护了一个所有对应文档的指针列表。

用CDocTemplate::GetFirstDocPosition函数获得与文档模板相关的文档集合中第一个文档的位置,并用POSITION值作为CDocTemplate::GetNextDoc的参数来重复遍历与模板相关的文档列表。函数原形为:

virtual POSITION GetFirstDocPosition( ) const = 0;

virtual CDocument *GetNextDoc(POSITION & rPos) const = 0; 

如果列表为空,则rPos被置为NULL.

      3)在文档类中获得文档模板指针

           在文档中可以调用CDocument::GetDocTemplate获得指向该文档模板的指针。

           函数原形如下: CDocTemplate * GetDocTemplate ( ) const; 如果该文档不属于文档模板管理,则返回值为NULL。

转载于:https://www.cnblogs.com/Dennis-mi/articles/3340632.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值