• VC中的Attach和Detach


    CWnd,CDC, Cxxx等都是MFC的类,这些类提供了很多成员函数来执行系统调用等操作,但是核心的类成员数据都是 句柄,
    (包括窗口句柄,DC句柄,线程句柄等)。  m_hWnd  m_hDC  m_hThread    如果这些类对象的这些句柄为空,就表示无效对象。
    比如你 CWnd * pWnd = new CWnd,执行是合法的,但是没有Create就没有窗口句柄,基本上就是一个无效对象,只是系统内存申请了内存分配空间而已,
    很多操作都无法执行(debug模式下会出现断言错误窗口)。  但是,假如你申请了一个CWnd,CDC的对象实体,
    可以使用Attach来指定一个有效的句柄付给这个对象。那么此对象就是Valid的了。你可能跟踪看看Attach的实现,其实就是给m_hxxx赋值,而Detach就是值复位。
      这2个操作没有申请内存释放内存操作,就是一个赋值而已,是不是成对使用看你代码的实际情况吧。只要理解了这2函数的意义就行了  
     其实CWnd,CDC等类就是多了一个包装,方便用户(程序开发者)使用,如果用SDK开发,完全可以实现一样的功能。   
    句柄是操作系统内核对象,而窗口指针、DC指针是用户对象(由你的程序管理)。

  • 相关阅读:
    Checked Exception & Unchecked Exception
    Spring事务:调用同一个类中的方法
    SpringMVC接收checkbox传值
    Java String 学习
    写给大忙人的JavaSE 8
    Spring in Action 4th 学习笔记 之 AOP
    Spring in Action 4th 学习笔记
    spring只是一个框架
    lambda小结
    电感的Q值
  • 原文地址:https://www.cnblogs.com/lidabo/p/3284637.html
Copyright © 2020-2023  润新知