MFC相关技术说明:<可参阅MSDN MFC TNO 3>
Mapping of Windows Handles to Objects
MFC对象与Win32 SDK 句柄的映射关系
说明: MFC使用C++对象封装Win32句柄(操作系统资源调度单元 HANDLE),所以在概念上一定要把MFC中的关于C++对象和WIN32句柄对象的概念区分开来,以下讨论就是MFC C++对象如何封装关联句柄
相关函数与技术:
1 FromHandle()
FromHandle(HANDLE handle);//MFC 类成员的静态方法
用于创建一个与句柄关联临时有效的MFC对象
ie:
CWnd *pWnd = CWnd::FromHandle(hwndObject);
注意这里创建的临时对象可能在离开它的作用域之后,就被删除掉
因为在CWinThread的默认的OnIdle()函数的处理中会调用
DeleteTempMap()将这些MFC对象从HANDLE上Detach掉并释放堆内存
注意:这是MFC提供的一种内存回收机制
2 Attach()
创建一个持续有效(permanent persistent)的MFC对象的方法
先创建一个MFC对象再调用成员函数Attach(HANDLE);
这时候创建的对象是持续关联到MFC对象的
注意此时如果销毁MFC对象(如一个局部变量离开其作用域)时会默认的销毁句柄
如果这不是想要达到的效果的话在销毁MFC对象的时候 先将MFC对象和句柄脱离
Detach()
3 MFC对象线程相关性
无论临时或持续化的MFC对象都是线程相关的 所以无法获取另一个线程的这种与句柄关联的MFC对象,所以不同的线程之间如果想对同一句柄所指向的对象进行操作最好是传递句柄对象而不是这种关联的MFC对象
4 常见的句柄对象(HANDLE OBJECT)与MFC 对象的映射关系
- HWND (CWnd and CWnd-derived classes)
- HDC (CDC and CDC-derived classes)
- HMENU (CMenu)
- HPEN (CGdiObject)
- HBRUSH (CGdiObject)
- HFONT (CGdiObject)
- HBITMAP (CGdiObject)
- HPALETTE (CGdiObject)
- HRGN (CGdiObject)
- HIMAGELIST (CImageList)
- SOCKET (CSocket)
分类:
VC/MFC
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
2012-04-27 js jsui框架收集整理
2012-04-27 再谈 document.documentElement 与 document.body 的 scrollWidth、offsetWidth、clientWidth
2012-04-27 offsetTop、offsetLeft、offsetWidth、offsetHeight原理使用介绍
2012-04-27 offsetLeft,Left,clientLeft的区别
2012-04-27 style.left,offsetLeft相对于容器的位置控制
2012-04-27 scrollTop、scrollLeft、scrollWidth、scrollHeight原理使用介绍