没有合适的资源?快使用搜索试试~ 我知道了~
文中介绍获得各种视图指针如下 1) 在View中获得Doc指针 2) 在App中获得MainFrame指针 3) 在View中获得MainFrame指针 4) 获得View(已建立)指针 5) 获得当前文档指针 6) 获得状态栏与工具栏指针 7) 获得状态栏与工具栏变量 8) 在Mainframe获得菜单指针 9) 在任何类中获得应用程序类 10) 从文档类取得视图类的指针(1) 11) 在App中获得文档模板指针 12) 从文档模板获得文档类指针 13) 在文档类中获得文档模板指针 14) 从文档类取得视图类的指针(2) 15) 从一个视图类取得另一视图类的指针 16)获取分割视图中各个视图的指针
资源推荐
资源详情
资源评论
MFC 中获取各种类指针的方法
获得各种视图指针如下
1) 在 View 中获得 Doc 指针
2) 在 App 中获得 MainFrame 指针
3) 在 View 中获得 MainFrame 指针
4) 获得 View(已建立)指针
5) 获得当前文档指针
6) 获得状态栏与工具栏指针
7) 获得状态栏与工具栏变量
8) 在 Mainframe 获得菜单指针
9) 在任何类中获得应用程序类
10) 从文档类取得视图类的指针(1)
11) 在 App 中获得文档模板指针
12) 从文档模板获得文档类指针
13) 在文档类中获得文档模板指针
14) 从文档类取得视图类的指针(2)
15) 从一个视图类取得另一视图类的指针
16)获取分割视图中各个视图的指针
VC 中编程对于刚刚开始学习的同学,最大的障碍和问题就是消息机制和指针获取与操作。其实这些内容基本上是每本 VC 学
习工具书上必讲的内容,而且通过 MSDN 很多问题都能解决。 下面文字主要是个人在编程中指针使用的一些体会,说的不当
的地方请指正。 一般我们使用的框架是 VC 提供的 Wizard 生成的 MFC App Wizard(exe)框架,无论是多文档还是单文档,
都存在指针获取和操作问题。 下面这节内容主要是一般的框架,然后再讲多线程中的指针使用。使用到的类需要包含响应的
头文件。首先一般获得本类(视,文档,对话框都支持)实例指针 this,用 this 的目的,主要可以通过类中的函数向其他类或者
函数中发指针,以便于在非本类中操作和使用本类中的功能。
1) 在 View 中获得 Doc 指针
CYouSDIDoc *pDoc=GetDocument();一个视只能有一个文档。
2) 在 App 中获得 MainFrame 指针
CWinApp 中的 m_pMainWnd 变量就是 MainFrame 的指针 也可以: CMainFrame *pMain =(CMainFrame
*)AfxGetMainWnd();
3) 在 View 中获得 MainFrame 指针
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd; or ((CMainFrame *)GetParent())->
4) 获得 View(已建立)指针
CMainFrame *pMain=(CmaimFrame *)AfxGetApp()->m_pMainWnd; CyouView *pView=(CyouView *)pMain-
>GetActiveView();
5) 获得当前文档指针
CDocument * pCurrentDoc =(CFrameWnd *)m_pMainWnd->GetActiveDocument();
6) 获得状态栏与工具栏指针
CStatusBar * pStatusBar=(CStatusBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_STATUS_BAR);
CToolBar * pToolBar=(CtoolBar *)AfxGetMainWnd()->GetDescendantWindow(AFX_IDW_TOOLBAR);
7) 如果框架中加入工具栏和状态栏变量还可以这样
(CMainFrame *)GetParent()->m_wndToolBar; (CMainFrame *)GetParent()->m_wndStatusBar;
8) 在 Mainframe 获得菜单指针
CMenu *menu=m_pMainWnd->Get Menu();
9) 在任何类中获得应用程序类用 MFC 全局函数 AfxGetApp()获得。
10)从文档获得视图类指针目的一般为了控制同一文档的多个视图的定位问题,我的体会特别是文字处理 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 类。 有了以上基础,我们已经可以从
文档类取得任何类的指针。为了方便,我们将其作为一个文档类的成员函数,它有一个参数,表示要获得哪个类的指针。实现
如下: 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("Connt Locate the View.
http://www.VCKBASE.com); return NULL; } return pView; } 其中用了两次视图类的成员函数 IsKindOf()来判断,是因
为退出 while 循环有三种可能: 1.pos 为 NULL,即已经不存在下一个视图类供操作; 2.pView 已符合要求。 1 和 2 同是满
足。这是因为 GetNextView()的功能是将当前视图指针改变成一个视图的位置同时返回当前视图指针,因此 pos 是 pView 的
下一个视图类的 POSITION,完全有可能既是 pos==NULL 又是 pView 符合需要。当所需的视图是最后一个视图是最后一个视
资源评论
jerrywu402
- 粉丝: 0
- 资源: 14
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Win64OpenSSL-3-3-0.exe
- 课高分程设计-基于C++实现的民航飞行与地图简易管理系统-南京航空航天大学
- 航天器遥测数据故障检测系统python源码+文档说明+数据库(课程设计)
- 北京航空航天大学操作系统课设+ppt+实验报告
- 基于Vue+Echarts实现风力发电机中传感器的数据展示监控可视化系统+源代码+文档说明(高分课程设计)
- 基于单片机的风力发电机转速控制源码
- 基于C++实现的风力发电气动平衡监测系统+源代码+测量数据(高分课程设计)
- 毕业设计- 基于STM32F103C8T6 单片机,物联网技术的太阳能发电装置+源代码+文档说明+架构图+界面截图
- 基于 LSTM(长短期记忆)(即改进的循环神经网络)预测风力发电厂中风力涡轮机产生的功率+源代码+文档说明
- 基于stm32f103+空心杯电机+oled按键+运动算法
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功