Cbitmap与HBITMAP和其它的类似问题

来源:互联网 发布:知乎 朱锋 编辑:程序博客网 时间:2024/05/22 01:48

首先看一下下面的表格,左边的是MFC提供的类,右边则是句柄,注意,这些句柄是一些结构体,跟类和对象并不相干

MFC对象

WINDOWS 句柄

CBitmap

HBITMAP

CPen

HPEN

CBrush

HBRUSH

CFont

HFONT

CPalette

HPALETTE

CRgn

HRGN

CDC

HDC

右边的为WINDOWS 句柄,换句话说,就是用SDK编程时使用的底层数据结构,而左边的系列则是根据右边的句柄为基础,综合了相关的操作方法,最终生成的的C++类,换句话说就是MFC对原有的类型进行了封装,但这并不意味着MFC中只用到了类似CBitmap这类的对象,某些函数,某些结构需要WINDOWS句柄,这时需要进行转换,转换的方法是如下:

(1)       用一个HANDLE来构建一个MFC对象的方法:利用已经有的WINDOWS句柄可以生成一个MFC对象,方法是调用FormHandle函数,下面的语句

CBitmap mybmp;

mybmp.FormHandle( hBitmap);

就可以创建一个基于hBitmap句柄的CBitmap对象了

(2)       从一个CBitmap对象中取出对应的句柄,有两种方法,但是都需要强制类型的转换,或者说是必须要显式的转换

CBitmap mybmp;

HBITMAP hBitmap;

hBitmap = (HBITMAP)mybmp.m_hObject;

hBitmap = (HBITMAP)mybmp;

任何一个对象都是从CObject类继承的,那么都存在一个成员变量,m_hObject,当然直接转换是最简单的

但是注意,这里存在一个特殊的类型,就是CDCHDC这两个类型的转换,原本的这两个类型不与前面的类型归为一类,由于常常使用,这里就先将其归类为这里,这两者的转换方式有区别:

CDC对象生成HDC句柄的方法是:

CDC *   pDC;

HDC h_DC;

h_DC = pDC-> m_hDC

HDC句柄生成CDC对象的方法是:

         pDC.FromHandle( h_DC);

从操作哦上来看其实差不多,因此归为一类,在遇到类似问题时,可以自己做一下尝试,然后参考下MSDN,这方面的类容会在后面的工作中进行添加

原创粉丝点击