如何实现CAPP、CMainFrame、CViEW和CDOC之间相互调用?
例如:我在CMainFrame 中写代码,要访问CVIEW类中的数据,该怎么写代码?
在CMainFrame 中,要访问CDOC类中的数据,该怎么写代码?
CVIEW类要访问CDOC类中的数据,该怎么写代码?
假设你是单文档单个VIEW的程序。那么:
1)CMainFrame:
GetActiveView()可得到View指针。例如: CyourView *pView=(CyourView *)this‐>GetActiveView(); //this即当前CMainFrame,可省略
GetActiveDocument()可得到Document指针。例如:
2)CDoc:
POSITION pos = GetFirstViewPosition();
CView* pView = GetNextView(pos); //得到View指针 具体解释见最下方
或者
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()‐>m_pMainWnd;
CyourView *pView=(CyourView *)pMain‐>GetActiveView();
3) CView:
GetDocument()可得到CDoc指针。例如:CYourSDIDoc *pDoc=this->GetDocument(); //一个视只能有一个文档,this即CView,可省略
AfxGetMainWnd()可得到MainFrame指针。例如:CMainFrame* pframe=(CMainFrame*)AfxGetMainWnd(); 或者CMainFrame* pframe=(CMainFrame*)AfxGetApp()->m_pMainWnd;
4) CApp:
成员变量 m_pMainWnd变量就是MainFrame的指针 或者
CMainFrame *pMainFrame =(CMainFrame*)AfxGetMainWnd();或者
CMainFrame *pMainframe=(CMainFrame*)AfxGetApp(); 5) 在任何类中获得应用程序类 用MFC全局函数AfxGetApp()获得
从文档获得视图类指针目的一般为了控制同一文档的多个视图的定位问题,我的体会 特别是文字处理CEditView当产生多个视图类时,这个功能是非常需要的。 CDocument类提供了两个函数用于视图类的定位: GetFirstViewPosition()和GetNextView() virtual POSITION GetFirstViewPosition() const; virtual CView* GetNextView(POSITION& rPosition) const; 注意:GetNextView()括号中的参数用的是引用方式,因此执行后值可能改变。 GetFirstViewPosition()用于返回第一个视图位置(返回的并非视图类指针,而是一 个POSITION类型值),GetNextView()有两个功能:返回下一个视图类的指针以及用 引用调用的方式来改变传入的POSITION类型参数的值。很明显,在Test程序中,只有 一个视图类,因此只需将这两个函数调用一次即可得到CTestView的指针如下(需定 义一个POSITION结构变量来辅助操作): CTestView* pTestView; POSITION pos=GetFirstViewPosition(); pTestView=GetNextView(pos); 这样,便可到了CTestView类的指针pTestView.执行完几句后,变量pos=NULL,因为没 有下一个视图类,自然也没有下一个视图类的POSITION.但是这几条语句太简单,不 具有太强的通用性和安全特征;当象前面说的那样,当要在多个视图为中返回某个指 定类的指针时,我们需要遍历所有视图类,直到找到指定类为止。判断一个类指针指 向的是否某个类的实例时,可用IsKindOf()成员函数时行检查,如: pView‐>IsKindOf(RUNTIME_CLASS(CTestView)); 即可检查pView所指是否是CTestView类。 有了以上基础,我们已经可以从文档类取得任何类的指针。为了方便,我们将其作 为一个文档类的成员函数,它有一个参数,表示要获得哪个类的指针。实现如下: 其中用了两次视图类的成员函数IsKindOf()来判断,是因为退出while循环有三种 可能: 1.pos为NULL,即已经不存在下一个视图类供操作; 2.pView已符合要求。 1和2同是满足。这是因为GetNextView()的功能是将当前视图指针改变成一个视图 的位置同时返回当前视图指针,因此pos是pView的下一个视图类的POSITION,完全 有可能既是pos==NULL又是pView符合需要。当所需的视图是最后一个视图是最后一 个视图类时就如引。因此需采用两次判断。 使用该函数应遵循如下格式(以取得CTestView指针为例): CTestView* pTestView=(CTestView*)GetView(RUNTIME_CLASS(CTestView)); RUNTIME_CLASS是一个宏,可以简单地理解它的作用:将类的名字转化为 CRuntimeClass为指针。至于强制类型转换也是为了安全特性考虑的,因为从同一个 基类之间的指针类型是互相兼容的。这种强制类型转换也许并不必要,但能避免一 些可能出现的麻烦。
POSITION pos = GetFirstViewPosition();
CView* pView = GetNextView(pos); 的具体解释:
6) 获得状态栏与工具栏指针
CStatusBar *pStatusBar=(CStatusBar *)AfxGetMainWnd()‐>GetDescendantWindow(AFX_IDW_STATUS_BAR);
CToolBar *pToolBar=(CtoolBar *)AfxGetMainWnd()‐>GetDescendantWindow(AFX_IDW_TOOLBAR); 如果框架中加入工具栏和状态栏变量还可以这样 (CMainFrame *)GetParent()‐>m_wndToolBar; (CMainFrame *)GetParent()‐>m_wndStatusBar;
CyourView *pView=(CyourView *)this‐>GetActiveView(); //this即当前CMainFrame,可省略
CYourSDIDoc *pDoc= pView->GetDocument();
GetMenu()获得菜单指针。例如 CMenu *pMenu=this->GetMenu();
如何实现CAPP、CMainFrame、CViEW和CDOC之间相互调用?相关推荐
- 前台为html后台是asp在vs2012中建立什么,Asp.net中后台*.cs与前台JS脚本之间相互调用的几点心得...
Asp.net中后台*.cs与前台JS脚本之间相互调用的几点心得 < type="text/javascript"> < type="text/java ...
- java 多个项目间事物_Java-web-多个独立项目之间相互调用实践
本篇文章只涉及到应用层面,没有涉及到什么底层原理之类的,我目前的实力还没有达到那个级别.如果是大神级别的人看到这篇文章,请跳过. 项目框架也已经是搭建好了的,springboot版本为1.5,数据库操 ...
- Spring Cloud之微服务之间相互调用、如何让一个微服务调用另外一个微服务
在使用微服务架构中,可能遇到一些业务情况会涉及服务之间相互调用,下面通过一个简单的demo给大家演示下,演示的是oms服务需要调用ump服务. 代码如下: 1.oms服务提供者 主要是这个注解: @E ...
- WinCC项目函数之间相互调用
采用WinCC作为上位机框架进行开发工业控制界面,全局脚本中C-Editor进行开发工业控制模型. 我们用C#或者C++时,方法之间调用.类调用等等,比较灵活.其实WinCC和C#或者C++一样. 项 ...
- 子窗体与父窗体之间相互调用其方法的实现
今天下午一直在研究子窗体与父窗体之间怎样实现方法调用,研究了整个下午也算有了一点小成,现在将自己积累的一点经验记录下来: 对于子窗体调用父窗体中的方法可以按如下的方法实现: 1.首先在父窗体中按如下方 ...
- python类之间相互调用_python相互调用
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python调用perl则不需要系统环境:windows7python版本:2. ...
- vue.js html 相互传值,Vue 父子组件之间相互调用传值以及多层组件之间相互调用传值...
一.父子组件传值 要点1:父组件赋予子组件属性值,子组件通过props 来接收值. 要点2:父组件可以通过 子组件对象($ref),来调用子组件的属性以及方法 要点3:子组件通过$emit 来调用父组 ...
- C与C++之间相互调用
1.导出C函数以用于C或C++的项目 如果使用C语言编写的DLL,希望从中导出函数给C或C++的模块访问,则应使用 __cplusplus 预处理器宏确定正在编译的语言.如果是从C++语言模块使用,则 ...
- matlab 文件之间相互调用实例
效果: 找到按钮的回调 function pushbutton1_Callback(hObject, eventdata, handles) cd 'Deploy Nodes' %square_ran ...
最新文章
- 9.path Sum III(路径和 III)
- 作业收缴系统使用手册(自写开源小系统)
- 16.算法调用优先于手写的循环
- Deep Learning 论文笔记 (2): Neural network regularization via robust weight factorization
- 14 代码分割之lazy:Suspense与路由懒加载
- java虚拟机之三--理解Java虚拟机体系结构
- DarkSide勒索病毒分析
- 文件服务器 ftp服务器的优缺点,FTP服务器优缺点分析.doc
- c语言 面试前必备基础知识
- 西方文学名著鉴赏——英文诗歌翻译赏析
- 小猫爪:动手笔记01-FreeRTOS移植
- 数据结构:按成绩输出名次排序
- c语言字母是怎么存储,C语言之数据在内存中的存储
- latex 页眉页脚
- 经济模型研究九:DBTC中流用平台激励力度
- 计算机连接游戏手柄,电脑如何使用手柄_电脑怎么连手柄打游戏-系统城
- Flex 是什么? flex和flash是什么关系?(转)
- 什么牌子的千兆网卡好用_不挑次的只挑好的 台式机千兆网卡应该买哪些?
- 四目大视场四目夜视镜 --TFN TD401 大视场头盔四目夜视仪 夜视镜 无需转头微光夜视系统 四目四管
- 清华计算机考研任昱鑫,牛!赣州6名学霸提前被清华北大“锁定”!来自这些学校…...
热门文章
- Python 删除含有文件的文件夹
- [原]UML建模语言进阶 - 用例视图详解 用例视图建模实战
- 【python】Visualization of field data(NBA)
- 【NX二次开发之用户界面】创建圆柱圆锥
- 实验室管理系统/实验设备管理系统
- 学习笔记:深度学习(6)——基于深度学习的语言模型
- 为Twemproxy 添加 Auth
- C#依赖注入常用的几种方式
- git上传中 :! [rejected] master -> master (fetch first)问题的解决方案
- 神经网络从被人忽悠到忽悠人(二)