CBitmap
CObject |
└CGdiObject |
└CBitmap |
CBitmap是MFC中的类。类CBitmap封装了Windows图形设备接口(GDI)中的位图,并且提供了操纵位图的成员函数。使用CBitmap对象之前要先构造CBitmap对象,调用其中的一个初始化成员函数设置位图对象的句柄。此后就可以调用其它成员函数了。
#include <afxwin.h>
CBitmap类的成员
构造函数
CBitmap | 构造一个CBitmap对象 |
初始化函数
LoadBitmap | 从应用的可执行文件中加载一个命名的位图资源来初始化位图对象 |
LoadOEMBitmap | 加载一个预定义的Windows位图来初始化位图对象 |
LoadMappedBitmap | 加载一个位图并把它的颜色映射为系统颜色 |
CreateBitmap | 用一个指定宽度、高度和位图模式的依赖于设备的内存位图初始化位图对象 |
CreateBitmapIndirect | 用BITMAP结构中给出的宽度、高度和模式(可以不指定)的位图初始化位图对象 |
CreateCompatibleBitmap | 用一个位图初始化对象使之与指定设备兼容 |
CreateDiscardableBitmap | 用一个可丢弃的、与指定设备兼容的位图初始化对象 |
属性
GetBitmap | 用位图信息填充BITMAP结构 |
operator HBITMAP | 返回CBitmap对象上的Windows句柄 |
操作
FromHandle | 给出Windows HBITMAP结构的指针时,返回指向CBitmap对象的指针 |
SetBitmapBits | 把位图的位设为指定的值 |
GetBitmapBits | 拷贝指定位图的位值到指定的缓冲 |
SetBitmapDimension | 设置位图的宽度和高度(以0.1毫米为单位) |
GetBitmapDimension | 返回位图的宽度和高度。要求已经调用SetBitmapDimension设置位图的宽度和高度 |
CBitmap::CBitmap
CBitmap();
说明:
构造一个CBitmap对象。生成的对象必须用下面的一个成员函数进行初始化。
CBitmap::CreateBitmap
BOOL CreateBitmap( int nWidth, int nHeight, UINT nPlanes, UINT nBitcount, const void* lpBits );
返回值:调用成功时返回非零值,否则为0。
参数:
nWidth | 指定位图的宽度(以像素数为单位)。 |
nHeight | 指定位图的高度(以像素数为单位)。 |
nPlanes | 指定位图中的彩色位面数。 |
nBitCount | 指定位图中每个像素颜色的位数。 |
lpBits | 指向一个短整型数组,数组中记录了位图的初始位值。如果为NULL,则新的位图没有被初始化。 |
说明:
本函数用指定的宽度、高度和位模式初始化依赖于设备的内存位图。
对彩色位图来说,参数nPlanes和nBitcount要有一个被设置为1。如果二者都被设置为1,则建立一个黑白位图。
虽然不能为显示设备直接选中一个位图,但可以调用CDC::SelectObject把位图置为内存设备上下文(memory device context)的当前位图,然后调用CDC::BitBlt函数把它拷贝到任何兼容的设备上下文中。
终止用CreateBitmap建立的CBitmap对象,先要从设备上下文中移出该位图,然后删除该对象。
要了解有关的更详细信息,请参阅BITMAP结构中对成员bmBits的描述。BITMAP结构在成员函数CBitmap::CreateBitmapIndirect中的说明。
CBitmap::CreateBitmapIndirect
BOOL CreateBitmapIndirect( LPBITMAP lpBitmap );
返回值:调用成功时返回非零值,否则为0。
参数:
lpBitmap | 指向包含有关位图信息的BITMAP结构。 |
说明:
本函数用lpBitmap指向的结构中指定的宽度、高度和位模式(可以不指定)初始化位图对象。虽然显示设备不能直接选中一个位图,但可以调用CDC::Select Object把位图置为内存设备上下文(memory device context)的当前位图,然后调用CDC::BitBlt或CDC::StrechBlt把它拷贝到任何兼容的设备上下文中(CDC::PatBlt 函数能把当前画刷的位图直接拷贝到显示设备的上下文中)。
如果已经调用函数GetObject填充了lpBitmap指向的结构,则位图的位值没有指定,并且位图未被初始化。要初始化该位图,应用可以调用CDC:BitBlt或::SetDIBits把CgdiObject::GetObject函数的第一个参数指定的位图的位值拷贝到CreateBitmapIndirect建立的位图中。
终止用CreateBitmapIndirect建立的CBitmap对象,要先从设备上下文中移出该位图,然后删除该对象。
CBitmap::CreateCompatibleBitmap
BOOL CreateCompatibleBitmap( CDC* pDC, int nWidth, int nHeight );
返回值:调用成功时返回非零值,否则为0。
参数:
pDC | 指定设备上下文。 |
nWidth | 指定位图的宽度(以像素数为单位)。 |
nHeight | 指定位图的高度(以像素数为单位)。 |
说明:
初始化一个与pDC指定的设备上下文兼容的位图。位图与指定的设备上下文具有相同的颜色位面数或相同的每个像素的位数。任何与pDC指定的设备兼容的内存设备都可以选择它作为当前位图。
如果pDC指向的是内存设备上下文,则返回的位图与设备上下文中当前选中的位图具有相同的格式。“内存设备上下文”是一块表示一块显示区域的内存,它可以把图像存储在内存中,以备拷贝到兼容设备的真实显示区域中。
建立一个内存设备上下文时,GDI自动地为它选择一个黑白原始位图。既然彩色内存设备上下文的当前位图既可以是彩色的也可以是黑白的,CreateCompatibleBitmap返回的位图就不一定是相同的格式设置。但是,非内存设备上下文的兼容位图的格式总是和设备的格式一致。
终止用CreateCompatibleBitmap建立的CBitmap对象,要先从设备上下文中移出位图,然后删除该对象。
CBitmap::CreateDiscardableBitmap
BOOL CreateDiscardableBitmap( CDC* pDC, int nWidth, int nHeight );
返回值:调用成功时返回非零值,否则为0。
参数:
pDC | 指定设备上下文。 |
nWidth | 指定位图的宽度(以像素数为单位)。 |
nHeight | 指定位图的高度(以像素数为单位)。 |
说明:
本函数初始化一个与pDC指定的设备上下文兼容的可丢弃的位图。位图与指定的设备上下文具有相同的颜色位面数或相同的每个像素的位数。任何与pDC指定的设备兼容的内存设备都可以选择它作为当前位图。
应用没有把该函数建立的位图选到某个显示上下文中时,Windows可以丢弃该位图。如果在Windows丢弃了该位图之后,应用又试图选中该位图,函数CDC::SelectObject将返回NULL。
终止用CreateDiscardableBitmap建立的CBitmap对象,要先从设备上下文中移出该位图,然后删除该对象。
CBitmap::FromHandle
static CBitmap* PASCAL FromHandle( HBITMAP hBitmap );
返回值:调用成功时返回一个指向CBitmap对象的指针,否则返回NULL。
参数:
hBitmap | 指定一个Windows GDI 位图的句柄。 |
说明:
本函数在调用时指定一个Windows GDI 位图的句柄,返回一个指向CBitmap对象的指针。如果该句柄上没有相联系的CBitmap对象,则为该句柄建立一个临时CBitmap对象。该临时CBitmap对象保持有效,直到应用在它的事件循环中出现空闲时间,此时Windows会删除所有的临时图形对象。换句话说,临时对象仅在一个Windows消息的处理过程中有效。
CBitmap::GetBitmap
int GetBimap( BITMAP* pBitMap );
返回值:调用成功时返回非零值,否则为0。
参数:
pBitMap | 指向BITMAP结构的一个指针,不能为NULL。 |
说明:
本函数用于查看CBitmap对象的信息。返回的信息存放在pBitMap指向的BITMAP结构中。
CBitmap::GetBitmapBits
DWORD GetBitmapBits( DWORD dwCount, LPVOID lpBits ) const;
返回值:调用成功时返回位图的实际字节数,否则为0。
参数:
dwCount | 指定要拷贝的字节数。 |
lpBits | 指向接收位图内容的缓冲。位图用字节数组表示,该数组与一个由很多双字节(16位)组成的结构等价。 |
说明:
本函数把CBitmap对象的位模式拷贝到lpBits指向的缓冲中。参数dwCount指定待拷贝的字节数。可以调用函数CgdiObject::GetObject得到指定位图的正确dwCount值。
CBitmap::GetBitmapDimension
CSize GetBitmapDimension( ) const;
返回值:
返回位图的宽度和高度,以0.1毫米为单位。位图高度存放在Csize对象的成员cy中,宽度存放在成员cx中。如果没有调用SetBitmapDimension设置位图的宽度和高度,函数将返回0。
说明:
本函数返回位图的宽度和高度。调用之前应已经调用SetBitmapDimension设置位图的宽度和高度。
CBitmap::LoadBitmap
BOOL LoadBitmap( LPCTSTR lpszRecourceName );
BOOL LoadBitmap( UINT nIDResource );
返回值:调用成功时返回非零值,否则为0。
参数:
lpszResourceName | 指向一个包含了位图资源名字的字符串(该字符串以null结尾)。 |
nIDResource | 指定位图资源中资源的ID号。 |
说明:
本函数从应用的可执行文件中加载由lpszResourceName指定名字或者由nIDResource指定的ID号标志的位图资源。加载的位图被附在CBitmap对象上。
如果由lpszResourceName指定名字的对象不存在,或者没有足够的内存加载位图,函数将返回0。
可以调用函数CgdiObject::DeleteObject删除由LoadBitmap加载的位图,否则CBitmap的析构函数将删除该位图对象。
警告:在删除位图对象之前,要保证它没有被选到设备上下文中。
在Windows3.1以及以后的版本中,增加了如下的位图:
OBM_UPARROWI
OBM_DNARROWI
OBM_RGARROWI
OBM_LFARROWI
在Windows3.0或者更早版本的设备驱动程序中不支持这些位图。位图的完整列表和图形请参阅“Win32程序员参考”。
CBitmap::LoadMappedBitmap
BOOL LoadmappedBitmap(
UINT nIDBitmap,
UNIT nFlags = 0,
LPCOLORMAP lpColorMap = NULL,
int nMapSize = 0
);
返回值:调用成功时返回非零值,否则为0。
参数:
nIDBitmap | 位图资源的ID号。 |
nFlags | 位图的标记。可以是0或者CMB_MASKED。 |
lpColorMap | 指向COLORMAP结构的一个指针。结构中记录了映射位图所需的颜色信息。如果本参数为NULL,函数将使用缺省的颜色映射。 |
nMapsize | 由lpColorMap指向的颜色映射的数目。 |
说明:
本函数加载一个位图并把它的颜色映射为当前系统颜色。缺省时LoadMapped Bitmap将映射通常在按钮图形中采用的颜色。
要建立一个映射的位图,请参阅“Win32 程序员参考”中的Windows函数::CreateMappedBitmap以及COLORMAP结构。
CBitmap::LoadOEMBitmap
BOOL LoadOEMBitmap( UINT nIDBitmap );
返回值:调用成功返回非零值,否则为0。
参数:
nIDBitmap | 预定义的Windows位图的ID号。具体定义在头文件WINDOWS.H中。可用的值如下:
|
说明:
本函数用于加载一个Windows预定义的位图。以OBM_OLD开头的位图名表示它们是在Windows3.0之前的版本采用的。
使用不是以OBM_OLD开头的常量,需要在包括头文件WINDOW.H之前定义常量OEMRESOURCE。
CBitmap::SetBitmapBits
DWORD SetBitmapBits( DWORD dwCount, const void* lpBits );
返回值:调用成功时返回设置位图位值的字节数,否则为0。
参数:
dwCount | 指定由lpBits指向的字节数。 |
lpBits | 指向一个BYTE类型的数组,数组中记录了要拷贝到CBitmap对象的位值。 |
说明:本函数用lpBits指定的位值设置位图的位值。
CBitmap::SetBitmapDimension
CSize SetBitmapDimension (int nWidth, int nHeight);
返回值:
返回前一个位图的维数。高度存放在CSize对象的成员cy中,宽度存放在成员cx中。
参数:
nWidth | 指定位图的宽度(以0.1毫米为单位)。 |
nHeight | 指定位图的高度(以0.1毫米为单位)。 |
说明:
本函数用于设置位图的高度和宽度。GDI一般不用这些数字,除非应用调用成员函数GetBitmapDimension来获取它们。
CBitmap::operator HBITMAP
operator HBITMAP( ) const;
返回值:
调用成功时返回一个由CBitmap对象表示的Windows GDI对象的句柄,否则返回NULL。
说明:
本操作符用于取得CBitmap对象上的Windows GDI对象句柄。这是一个校验性操作符,可直接参考HBITMAP对象