mfc类之间的指针句柄转换.doc
在Microsoft Foundation Classes (MFC)库中,处理对象间的引用和通信是开发Windows应用程序的关键部分。MFC设计为简化Windows编程,提供了一种面向对象的方式来封装Windows API。在这个框架下,句柄(Handle)和指针是两种常见的数据类型,分别用于标识Windows对象和C++对象。下面我们将深入探讨MFC中句柄与指针之间的转换,以及它们在不同类之间如何交互。 1. **句柄与指针的概念** - 句柄是Windows操作系统用来标识资源的一个整数值,它不是对象本身,而是一个可以用来查找对象的标识符。 - 指针则是C++中指向对象的地址,可以直接访问和操作对象。 2. **MFC中的句柄与指针转换** - `m_pMainWnd` 是CWinApp类中的一个成员,存储了主框架窗口(MainFrame)的指针。通过`AfxGetApp()->m_pMainWnd`,可以在任何地方获取到主框架窗口的指针。 - `AfxGetMainWnd()` 是一个全局函数,用于获取应用程序的主窗口句柄,可以转换为对应的C++对象指针。 - `GetDocument()` 方法在CView类中定义,用于获取关联的文档对象指针。 - `GetActiveView()` 返回当前活动视图的指针,而在MDI(多文档界面)应用中,需要通过`MDIGetActive()`先获取活动的子框架窗口,然后通过`GetActiveView()`获取视图。 3. **类间转换** - 在View中获取Doc指针,通过`GetDocument()`。 - 在App中获取MainFrame指针,利用`AfxGetApp()->m_pMainWnd`或`CMainFrame *pMain = (CMainFrame *)AfxGetMainWnd();`。 - 在View中获取MainFrame指针,`CMainFrame *pMain=(CMainFrame *)AfxGetApp()->m_pMainWnd;`。 - 获取已建立的View指针,需要通过MainFrame的`GetActiveView()`方法。 - 获取当前文档指针,`CDocument * pCurrentDoc = (CFrameWnd *)m_pMainWnd->GetActiveDocument();`。 - 获取状态栏和工具栏指针,使用`GetDescendantWindow()`方法。 4. **类间的引用** - 在文档类中获取视图类的句柄,通过`GetView()`,还可以通过`GetFirstViewPosition()`和`GetNextView()`遍历所有视图。 - 在应用程序类中获取视图类的句柄,对于SDI(单文档界面)应用,使用`GetActiveView()`;对于MDI应用,先`MDIGetActive()`再`GetActiveView()`。 - 在框架类中获取文档类的句柄,SDI应用中,通过`GetActiveView()`然后`GetDocument()`;MDI应用中,从`CMainFrame`或`CChildFrame`的`GetActiveView()`和`GetDocument()`。 5. **注意事项** - 当从标准句柄转换为自定义类的句柄时,确保进行正确的类型转换,例如`((CMyApp*)AfxGetApp())->XXXX();`。 - 在操作句柄或指针之前,确保对象已经正确创建并初始化,避免空指针异常。 - 使用`AfxGetInstanceHandle()`可以获取当前进程的实例句柄,这对于某些特定场景,如动态链接库(DLL)的交互,可能是必要的。 了解并熟练掌握这些转换和引用方法,对理解MFC框架的内部工作原理至关重要,也是编写高效、健壮的MFC应用程序的基础。在实际开发中,开发者需要根据具体应用场景灵活运用这些技巧,以实现不同组件间的有效通信。
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![rar](https://img-home.csdnimg.cn/images/20241231044955.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![zip](https://img-home.csdnimg.cn/images/20241231045053.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![docx](https://img-home.csdnimg.cn/images/20241231044901.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![](https://csdnimg.cn/release/download_crawler_static/5848659/bg1.jpg)
![](https://csdnimg.cn/release/download_crawler_static/5848659/bg2.jpg)
剩余10页未读,继续阅读
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/a9755ff95edd4be5a488b6148e68ae1d_d_a_r_k.jpg!1)
- 粉丝: 50
- 资源: 7
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 基于Java的Web考试系统设计与实现源码
- 基于Vue技术的仓库作业可视化大屏设计源码
- 基于Html与JavaScript的高校假期去向APPweb端设计源码
- 基于小波变换与平行注意力的多源遥感图像分类设计源码
- 基于Vue框架的二手书交易系统设计源码
- 基于微信小程序的new-ailinjia-wxapp项目设计源码
- 基于Java和前端技术栈的施工管理验收系统设计源码
- 基于Vue框架的铃宇绩效项目设计源码
- 基于C++和Qt框架的航班订票管理系统设计源码
- 基于CSS、HTML、JavaScript、Python的web期末课程设计数据库连接源码
- 基于Vue+Node.js+Express+MySQL的留言墙项目设计源码
- 基于Vue.js的完整书城项目(前台官网+后台管理系统)设计源码
- 基于Vue的finance-client企业财务管理平台pc客户端设计源码
- 基于JavaScript、TypeScript及微信小程序的红色大坪设计源码
- 基于Java语言的fjdshopping仿京东冷链一体平台设计源码
- 基于Vue框架的ShengHongSports场地预约设计源码
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)