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指针是用户对象(由你的程序管理)。
相关文章
- 02-15Tomcat中更改网站根目录和默认页的配置方法
- 02-15Set中的add和addAll方法
- 02-15android – WebView – Youtube视频在旋转的背景中播放和最小化
- 02-15JS中Map和ForEach的区别
- 02-15MFC技巧三__VC6 单文档 替换MFC默认的菜单栏和工具栏(转)
- 02-15C++中,new/delete和malloc/free的区别
- 02-15python中的参考和副本
- 02-15KB,Kb单位换算,网络带宽中的Kbps和KB/s到底是什么意思? (注:B和b的区别)
- 02-15css中absolute定位的top:100%和bottom:0的区别
- 02-15CSS中的position和float