MFC 对象与Win32 SDK 句柄的映射关系

简介: MFC相关技术说明:Mapping of Windows Handles to ObjectsMFC对象与Win32 SDK 句柄的映射关系说明: MFC使用C++对象封装Win32句柄(操作系统资源调度单元 HANDLE),所以在概念上一定要把MFC中的关于C++对象和WI...
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)
目录
相关文章
|
XML JavaScript 开发工具
[转]VC++中操作XML(MFC、SDK)
XML在Win32程序方面应该没有在Web方面应用得多,很多Win32程序也只是用XML来存存配置信息而已,而且没有足够的好处的话还不如用ini。VC++里操作XML有两个库可以用:MSXML和XmlLite。
1084 0
|
开发工具
VC++ WIN32 sdk实现按钮自绘详解.
网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片:    首先建立一个标准的Win32 Application 工程.选择a simple Win32 Application.
1679 0
|
开发工具 Windows
win32 sdk树形控件的项拖拽实现
本课中,我们将学习如何使用树型视图控件。另外还要学习如何在树型视图中完成拖-拉动作,以及如何使用图象列表。 理论: 树型视图是一种特别的窗口,我们可以使用它一目了然地表示某种层次关系。譬如象在资源管理器中左边窗口中的就是树型视图。
1274 0
|
开发工具
win32 sdk 列表视图控件绘制
[cpp] view plaincopy   //////////////////////////////////////////////////////////////   LRESULT ListViewCustomDraw(HWND hwnd, LPARAM lParam...
1068 0
|
开发工具
VC++ WIN32 sdk实现按钮自绘详解 之二.
网上找了很多,可只是给出代码,没有详细解释,不便初学者理解.我就抄回冷饭.把这个再拿出来说说. 实例图片:    首先建立一个标准的Win32 Application 工程.选择a simple Win32 Application.
1189 0
|
开发工具 C++
win32 sdk绘制ListBox控件
1》产生:   [html] view plaincopy   //   HWND CreateLB(HWND parentWnd)   {       HWND hListBox=0;       hListBox = CreateWindow("L...
1091 0
|
开发工具
MFC与SDK中的重画问题 。。WM_PAINT消息的处理
  在基于多文档的应用程序  CView的重绘为例子SD   在 K中我们是拦截 WM_PAINT 消息进行 重回的处理 只要 窗体一出现Invalid Area 那么都需要重绘    在MFC中 WM_PAINT 消息的响应函数 是 OnPaint() 但是为什么重绘 我们一直在 O...
854 0
|
消息中间件 开发工具 Windows
win32 SDK窗口 详解
  ///Class  Style    是指窗口本身的 属性             // CS_NOCLOSE  就是窗口不能被关闭      //  CS_HREDRAW  CS_VREDRAW  就是在 窗口移动或者 窗口的宽度或者高度改变的时候就会发送 WM_PAINT 消...
1224 0