欢迎来到装配图网! | 帮助中心 装配图网zhuangpeitu.com!
装配图网
ImageVerifierCode 换一换
首页 装配图网 > 资源分类 > DOC文档下载
 

在MFC类中各种类的指针的获取和应用

  • 资源ID:32109338       资源大小:34.50KB        全文页数:3页
  • 资源格式: DOC        下载积分:15积分
快捷下载 游客一键下载
会员登录下载
微信登录下载
三方登录下载: 微信开放平台登录 支付宝登录   QQ登录   微博登录  
二维码
微信扫一扫登录
下载资源需要15积分
邮箱/手机:
温馨提示:
用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
支付方式: 支付宝    微信支付   
验证码:   换一换

 
账号:
密码:
验证码:   换一换
  忘记密码?
    
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

在MFC类中各种类的指针的获取和应用

关于mfc下的文档和视图以及框架之间的访问, 这些问题已经是老生常谈了,但我觉得还是都没有详细的说明,特别是对于英语较差的人,我查看了一些blog,总结了一下!希望对和我一样的人有点帮助! 一: 1: 因为对于sdi程序,主框架窗口就是文档框窗(如果这个也不知道,就要查看一下mfc下的单文档的构成原理了). 下面所说的是关于单文档的. 例子: 在cmainframe框架中如何得到视图类的指针. 可以 先得到框架指针,然后调用 getactiveview 函数指向当前活动视. c *view * pview; pview=(c*view*)(cframewnd*)afxgetapp()->m_pmainwnd)->getactiveview(); 当然这些也许都知道是这么用的,但真正的m_pmainwnd和afxgetapp()是什么意思也许有的人不明白. 大家也许都知道如何在app中获得mainframe指针(框架类): cwinapp 中的 m_pmainwnd变量就是cmainframe的指针所以在别的类下也可以先得到m_pmainwnd,就得到了mainframe的指针. 所以得到视图类的指针,必先 得到cframewnd的指针m_pmainwnd,然后在调用framewnd下的getactiveview 就指向当前活动视. m_pmainwnd的由来: 每一个mfc应用程序都有一个cwinapp派生类的对象。这个对象对应着程序的主线程。而 cwinapp 类中有一个 cwnd * m_pmainwnd 成员变量。这个成员变量记录了应用程序的主窗口。 当你新建一个mfc应用程序的时候,在 initinstance虚函数里都会出现对 m_pmainwnd 赋值的语句.唯一的例外是单文档界面的mfc应用程序,你无法在 initinstance 函数里看到这段代码,因为它已经被隐藏在 processshellcommand 这个函数里了。由此你就可以下结论了:只要创建自己的窗口类,就要把这个类的对象赋值给 m_pmainwnd .而这个成员只能在c*app类中才可以使用,所以怎样使用这个cwinapp类里的cwnd 类型的变量来得到主框架窗口的指针呢? afxgetapp函数才可以 , 因为afxgetapp()得到的是cwinapp类的对象,且afxgetapp返回值为cwinapp对象指针,就是mfc生成的c*app.cpp中定义的那个对象(对象theapp的指针)。 因为你是在自己创建的项目中得到cwndapp成员函数或者成员变量,所以你必须强制转换为你自己的项目中的类,才能找到成员函数或者变量. 注: 在单文档中,获得视指针的最简单的方法还是 (c*view *)cframewnd:getactiveview() 2: 当然在framewnd中也可以得到文档类的指针: cmydocument* pdoc; pdoc=(cmydocument*)(cframewnd*)afxgetapp()->m_pmainwnd)->getactivedocument(); 3: 由上面可以知道:在view中怎样获得mainframe指针 cmainframe *pmain=(cmainframe *)afxgetapp()->m_pmainwnd; 注: 从视图类中获得主帧窗口类指针:用函数:cwnd:getparentframe()或afxgetmainwnd()也可达到目的。getparentframe()的工作原理是在父窗口链中搜索,直到找到cframewnd或其派生类为止,并返回其指针。 (cmainframe *)cwnd:getparentframe() 或者 (cmainframe *)afxgetmainwnd() 二: 当然对于mdi程序,由于子窗口才是文档框窗,因此首先要用getactiveframe()取得活动子框架窗口,然后通过该子窗口获取活动视图和文档: cmdichildwnd* pchild=(cmdichildwnd*)(cframewnd*)afxgetapp()->m_pmainwnd)- >getactiveframe(); 取得活动视图: cmyview* pview=(cmyview*)pchild->getactiveview(); 取得活动文档: cmydocument* pdoc=pchild->getactivedocument(); 注: 也可以用这种方法来得到多文档中的视指针 /获得活动子框架窗口 cmdichildwnd* pchild=(cmdichildwnd*)getactiveframe(); /或: cmdichildwnd* pchild=mdigetactive(); /获得活动子帧窗口的活动视图 cmyview* pview=(cmyview*)pchild->getactiveview();三: 1. 从视图类获得文档类的指针 在视图类中需要引用文档类的地方之前,使用以下语句: c*doc *pdoc=(c*doc*)getdocument(); 以后便可使用pdoc指针访问文档类。 2. 从文档类取得视图类的指针 cdocument类提供了两个函数用于视图类的定位: getfirstviewposition()和getnextview() 注意:getnextview()括号中的参数用的是引用方式,因此执行后值可能改变.getfirstviewposition()用于返回第一个视图位置(返回的并非视图类指针,而是一个position类型值),getnextview()有两个功能:返回下一个视图类的指针以及用引用调动的方式来改变传入的position类型参数的值。很明显,在test程序中,只有一个视图类,因此只需将这两个函数调用一次即可得到ctestview的指针如下(需定义一个position结构变量来辅助操作): c*view* pview; position pos=getfirstviewposition(); pview=getnextview(pos);这样,便可到了c*view类的指针pview.执行完成几句后,变量pos=null,因为没有下一个视图类,自然也没有下一个视图类的position.但是之几条语句太简单,不具有太强的通用性和安全特征;当象前面说的那样,当要在多个视图为中返回某个指定类的指针时,我们需要遍历所有视图类,直到找到指定类为止。判断一个类指针指向的是否某个类的实例时,可用iskindof()成员函数时行检查如: pview->iskindof(runtime_class(c*view); 即可检查pview所指是否是c*view类。有了以上基础,我们已经可以从文档类取得任何类的指针。为了方便,我们将其作为一个文档类的成员函数,它有一个参数,表示要获得哪个类的指针。实现如下: cview* c*doc:getvieww(cruntimeclass* pclass) cview* pview; position pos=getfirstviewposition(); while(pos!=null) pview=getnextview(pos); if(!pview->iskindof(pclass) break; if(!pview->iskindof(pclass) afxmessagebox("connt locate the view."); return null; return pview;其中用了两次视图类的成员函数iskindof()来判断,是因为退出while循环有三种可能:1.pos为null,即已经不存在下一个视图类供操作;2.pview已符合要求。3.1和2同是满足。这是因为getnextview()的功能是将当前视图指针改变成一个视图的位置同时返回当前视图指针,因此pos是pview的下一个视图类的position,完全有可能既是pos=null又是pview符合需要。当所需的视图是最后一个视图是最后一个视图类时就如引。因此需采用两次判断。使用该函数应遵循如下格式(以取得ctestview指针为例):ctestview* ptestview=(ctestview*)getview(runtime_class(ctestview);runtime_class是一个宏,可以简单地理解它的作用:将类的名字转化为cruntimeclass为指针。至于强制类型转换也是为了安全特性考虑的,因为从同一个基类之间的指针类型是互相兼容的。这种强制类型转换也许并不必要,但能避免一些可能出现的麻烦

注意事项

本文(在MFC类中各种类的指针的获取和应用)为本站会员(仙***)主动上传,装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知装配图网(点击联系客服),我们立即给予删除!

温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!