关于HBITMAP

来源:百度知道 编辑:UC知道 时间:2024/06/06 04:56:00
在VC中一般显示bmp要先转换为HBITMAP,为什么不能够直接显示呢?他们又是哪一个与设备有关,哪一个与设备无关呢?
谢谢各位,可是我想问的不是怎么实现,而是为什么这样实现(VC++):
程序所用的函数大致是:CreatDIBitmap,Seletjob,Bitblt; CreatDIBitmap返回值是HBITMAP吧,我就是这里不明白,为什么要这样转换?
书上说这是位图句柄,我知道什么是句柄,那位图句柄怎么理解?

VC中显示bmp要用到CBitmap类,Windows 里显示/画东西还要与device context建立关系。建bitmap GDI object 要调用CBitmap类的函数Attach
()例如:
bitmap.Attach( hBmp );
hBmp 是HBITMAP

bmp本身与设备无关。但显示时它要与设备支持的颜色种类做color mapping.

下面是我的一个子程序,用于我的程序VPIC,你可直接使用。这个子程序打开bmp文件,建bitmap GDI object,也就是得到CBitmap object。

/* =========================================================================*
* LoadBMPImage - Loads a BMP file and creates a bitmap GDI object
* also creates logical palette for it.
* Returns - TRUE for success (check success or not)
* sBMPFile - Full path of the BMP file, (input file name)
* bitmap - The bitmap object to initialize, (bring back img in it)
* pPal - Will hold the logical palette. Can be NULL (bring back)
*==========================================================================*/

BOOL CVPICDoc::LoadBMPImage(LPCTSTR sBMPFile, CBitmap &bitmap, CPalette *pPal)
{