MFC类中获得其它类指针节能

网红  2020/10/23

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

综合1和2,很容易得出视图类之间互相获得指针的方法:就是用文档类作中转,先用1的方法得到文档类的指针,再用2的方法,以文档类的视图定位函数取得另一个视图类。

同样,可以实现成一个函数:

(假设要从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("Connt Locate the View.");

return NULL;}

return pView;}

这个函数和2中的GetView()相比,一是多了第一句以取得文档类指针,二是在GetFirstViewPosition()和GetNextView()前加上了文档类指针,以表示它们是文档类成员函数。

有了此函数;当要从CTestAView中取得CTestBView的指针时,只需如下:

CTestBView* pTestbView=(CTestView*)GetView(RUNTIME_CLASS(CTestBView));

4. 从主帧窗口类获得视图类指针

对本文所举的Test这各SDI程序来说,这是简单的,只需用CFrameWnd类的GetActiveView()成员函数即可。格式如下:

CFrameWnd::GetActiveView()

但将此函数应用在MDI应用的CMDIFrameWnd为中时,并不象所想的那样获得当前活动子窗口的视图类,而是返回NULL,这是一个要领性问题。在MDI程序中,CMDIFrameWnd没有和任何视图类发生关系,也就是说没有视图类直接属于它,只有子帧窗口类CMDIChildWnd才是所有子窗口视图类的父窗口。而子帧窗口的父窗口才是CFrameWnd。

因此,在MDI程序中获得活动视图类的正确方法应为:先获得活动子帧窗口,再从活动子帧窗口中获得活动视图类:

//获得活动子帧窗口

CMDIChildWnd* pChild=(CMDIChildWnd*)GetActiveFrame();

//或:CMDIChildWnd* pChild=MDIGetActive();

//获得活动子帧窗口的活动视图

CMyView* pView=(CMyView*)pChild-GetAct“这项成果破坏了我们有关生命属性的基本信念iveView();

5.从视图类中获得主帧窗口类指针:

用函数:CWnd::GetParentFrame()或AfxGetMainWnd(); 可达到目的。

GetParentFrame()的工作原理是在父窗口链中搜索,直到找到CFrameWnd或其派生类为止,并返回其指针。用法在InfoViewer中有详细介绍。

6.在任何类中获得应用程序类

用MFC全局函数AfxGetApp()可做到。

7.从应用程序类中获得主帧窗口类

CWinThread类有一个数据成员叫m_pMainWnd,由于CWinApp类由CWinThread派生而来,我们的应用程序为又由CWinApp派生而来,所以我们的CTestApp类也有一个m_pMainWnd成员,它所指南的即是CMainFrame类。(需进行合适的强制类型转换)。

总结起来有几点注意:

A.在类A中获得类B的指针时,类A应包含类B的头文件。

B.在很多时候要进行强制类型转换,并要注意括号的括法。

由于派生类和父类指针类型的兼容,使明确区分各个类变得十分重要。在拿不准的时候,最好加上强制类型转换。

查看本文来源

乌鲁木齐治疗白癜风费用
晋城什么医院治男科
小儿积食的表现症状
相关推荐
美国本科留学ACT与SAT选择攻略节能

对于申请美国本科留学的同学来讲,选择ACT考试还是SAT考试困扰了不少学生及家长,SAT考试和你卖3元卖不出...

网红 · 2020-11-20 15:24:49
伊利创中国首个母婴生态圈引领母婴行业价值节能

var browVersion = parseInt(pVersion); if (pName=="Netscape" amp; amp; browVersion =4) ite(" SCR"+"IPT LANGUAGE=\"Javascript1.1\" SRC=\" " ch...

网红 · 2020-11-20 15:11:51
一揽子互金规范发展体系正成型0节能

作为互联金融的监管年,2017年行将过半。一方面,行业跑马圈地已经接近尾声,传统金融机构加速入场,行...

网红 · 2020-11-20 14:00:53
情人节用美妆向他示爱节能

var browVersion = parseInt(pVersion); if (pName=="Netscape" amp; amp; browVersion =4) ite(" SCR"+"IPT LANGUAGE=\"Javascript1.1\" SRC=\" " ch...

网红 · 2020-11-20 13:15:22
浙江要让孩子不仅有书读还要读好书节能

浙江要让孩子不仅“有书读”还要“读好书”中青杭州2月7日电(实习生 吉星宇一 中国青年报•中青 董...

网红 · 2020-11-20 13:08:59
lgilkb00节能

知情人士今日透露,高盛亚洲特殊资产投资集团(Asian Special Situation Group, “ASSG”)原联合负责人张奕加盟...

网红 · 2020-11-20 13:03:24