MFC句柄包装类

  MFC中有大量的句柄包装类。顾名思义,所谓句柄包装类,指的是这些类是封装了系统对象的句柄(HWND,HDC,HBITMAP等等),并提供了一组成员函数作为访问系统对象的接口。体现了一种资源封装的理念。

  从这些句柄包装类的意义上可以看出,一个被完全构造好,处于良好状态的MFC对象,其中的句柄成员(用以标志一个系统对象)必须是有效的(这是必要条件),才能正常使用那些成员函数来操作这个系统对象。所以一般的MFC句柄包装类对象的构建要完成两个任务,第一,创建一个句柄包装类对象(在堆或在栈中均可,视实际需要而定);第二,初始化其中的系统对象句柄。大部分的包装类对象的构建都通常分两步进行:1,创建一个对象,2,通过create等类似的成员函数创建系统对象并初始化对象中的句柄成员。当然这两部也可以直接在构造函数中完成。(此时一般需要一个系统对象句柄作为参数,或者另一个被良好构造的句柄包装类对象做参数,以在构造函数中就能初始化句柄成员。其他方法还有通过Attach和Detach将部分构造的对象和系统对象句柄绑定,或者通过FromHandle获得一个临时的句柄包装类对象等 )

例如:
CDC dc;
dc.LineTo( point );
无法运行,是因为dc这个对象仅仅被部分构建,其中的系统对象句柄成员并没有赋值为一个有效的绘图设备句柄,自然其后的LineTo调用就会失败。而:
CDC *dc = GetDC();
dc-〉LineTo( point );
通过调用窗口类的GetDC()成员函数,将返回一个被良好构造的CDC对象(即该对象中的设备句柄成员已经被赋值为一个有效的句柄),所以其后的LineTo操作就没问题。

  问题的关键不在于对象创建于栈还是堆中,而在于是否完全构造好了一个句柄包装类对象。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值