MFC深度解析:句柄映射与临时对象
"这篇文章深入探讨了MFC中的句柄映射和临时对象机制,MFC通过这个机制提供了一种统一的方法,从C语言中分配的句柄获取对应的C++对象。它还试图解释由API调用分配的Windows对象句柄与封装它的C++ MFC对象之间的基本关系。" 在MFC(Microsoft Foundation Classes)框架中,句柄映射和临时对象是实现C++对象与Windows API中使用的句柄之间转换的关键机制。这篇文档将详细阐述这些概念。 1. **简介** 本文档旨在解析MFC如何处理句柄和临时对象,以及它们如何帮助在C++类和Windows API之间建立桥梁。 2. **回顾基础知识** - **什么是句柄?** 句柄是Windows操作系统中用于引用系统资源(如窗口、设备或线程)的一种抽象标识符。它不是指针,但可以被用来间接访问底层对象。 - **句柄与MFC对象** MFC对象是对Windows API中的句柄进行了封装的C++对象,提供了更高级别的接口和管理。 - **C++窗口对象与HWND的关系** HWND是Windows API中的一个类型定义,表示窗口的句柄。C++中的CWnd类通常用来封装HWND,提供更丰富的成员函数来操作窗口。 - **new/delete与Create/Destroy** C++中的new和delete操作符用于动态内存管理,而Create和Destroy函数则对应于Windows API中的创建和销毁句柄对象。 - **Attach/Detach** C++对象的Attach方法用于将句柄与对象关联,而Detach方法断开这种关联。 3. **准备知识** - **CMapPtrToPtr** MFC提供的一种模板类,用于存储和查找从一种指针到另一种指针的映射。 - **CRuntimeClass** 用于运行时确定对象的类信息,支持动态创建和类型检查。 - **CHandleMap** MFC类,实现了句柄到对象的映射,是CMapPtrToPtr的子类,专门用于句柄映射。 4. **深入研究** - **CWnd::GetFocus()** 返回当前拥有焦点的窗口的CWnd指针,这个指针可能是一个临时对象,因为焦点窗口可能会改变。 - **CWnd::FromHandle()** 根据指定的HWND创建并返回一个CWnd对象,可能是一个临时对象,因为句柄可能指向无效的窗口。 - **AFX_MAP_HWND(BOOL bCreate)** MFC宏,用于将HWND转换为CWnd指针,bCreate参数决定是否创建新的CWnd对象。 5. **为什么返回的指针是临时的?** 这是因为这些对象通常只在函数调用的生命周期内有效,之后可能被释放或改变,因此返回的指针应当被视为临时的,不能长期持有。 6. **结论** 文章最后总结了句柄映射和临时对象在MFC中的作用和重要性,以及它们如何帮助保持对象和句柄的同步,并确保正确管理和使用Windows API资源。 以上内容详细介绍了MFC中的句柄映射和临时对象机制,这些知识对于理解和开发MFC应用程序至关重要,特别是涉及到Windows API交互的部分。理解这些概念有助于编写更加高效且稳定的MFC代码。
![](https://csdnimg.cn/release/download_crawler_static/2510364/bg5.jpg)
剩余22页未读,继续阅读
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 0
- 资源: 4
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![](https://csdnimg.cn/release/wenkucmsfe/public/img/voice.245cc511.png)
最新资源
- Hadoop生态系统与MapReduce详解
- MDS系列三相整流桥模块技术规格与特性
- MFC编程:指针与句柄获取全面解析
- LM06:多模4G高速数据模块,支持GSM至TD-LTE
- 使用Gradle与Nexus构建私有仓库
- JAVA编程规范指南:命名规则与文件样式
- EMC VNX5500 存储系统日常维护指南
- 大数据驱动的互联网用户体验深度管理策略
- 改进型Booth算法:32位浮点阵列乘法器的高速设计与算法比较
- H3CNE网络认证重点知识整理
- Linux环境下MongoDB的详细安装教程
- 压缩文法的等价变换与多余规则删除
- BRMS入门指南:JBOSS安装与基础操作详解
- Win7环境下Android开发环境配置全攻略
- SHT10 C语言程序与LCD1602显示实例及精度校准
- 反垃圾邮件技术:现状与前景
![](https://img-home.csdnimg.cn/images/20220527035711.png)
![](https://img-home.csdnimg.cn/images/20220527035111.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/green-success.6a4acb44.png)