zoukankan      html  css  js  c++  java
  • MFC 对象与Win32 SDK 句柄的映射关系

    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对象从HANDLEDetach掉并释放堆内存
    注意:这是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)
  • 相关阅读:
    HDU 2546:饭卡(01背包)
    HPU 第三次积分赛:阶乘之和(水题)
    拓扑排序练习题
    HDU 2647:Reward(拓扑排序+队列)
    HDU 3342:Legal or Not(拓扑排序)
    HDU 2094:产生冠军(拓扑排序)
    POJ 2585:Window Pains(拓扑排序)
    51Nod 1002:数塔取数问题(DP)
    cogs696 longest prefix
    poj3764 The xor-longest Path
  • 原文地址:https://www.cnblogs.com/lidabo/p/3048001.html
Copyright © 2011-2022 走看看