MFC中获取各种类指针的方法

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 *pMenu=m_pMainWnd->GetMenu();
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. 但是这几条

语句太简单,不具有太强的通用性和安全特征;当象前面说的那样,当要在多个视图为中返回某个

指定类的指针时,我们需要遍历所有视图类,直到找到指定类为止。判断一个类指针指向的是否某

 

内容概要:本文档为《软件设计师资料净化与分析报告(汇总)》,系统整理了软件设计师考试涉及的核心知识点及历年试题分析,涵盖计算机系统基础、操作系统、数据库、软件工程、网络与信息安全、程序设计语言、知识产权及计算机专业英语等多个模块。文档不仅包含各知识点的理论讲解,如CPU结构、海明码校验、虚拟存储器、PV操作、页式存储管理、关系范式、设计模式等,还结合真题解析强化理解,并提供了大量案例分析与算法实现,如数据流图、E-R图设计、排序算法、策略模式、备忘录模式等,全面覆盖软件设计师考试的上午选择题与下午案例分析题的考核重点。; 适合人群:准备参加全国计算机技术与软件专业技术资格(水平)考试中“软件设计师”科目的考生,尤其适合有一定计算机基础、正在系统复习备考的中级技术人员。; 使用场景及目标:①系统梳理软件设计师考试大纲要求的知识体系;②通过真题解析掌握高频考点与解题思路;③强化对操作系统、数据库、软件工程等核心模块的理解与应用能力;④提升对设计模式、算法设计与程序语言机制的综合运用水平。; 阅读建议:建议结合考试大纲,分模块逐步学习,重点掌握各章节的知识点归纳与真题解析部分,对于案例分析题应动手练习数据流图、E-R图绘制及代码填空,算法部分应理解分治、动态规划等思想,并通过反复练习巩固记忆,全面提升应试能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值