在WIN32中,将位图显示在窗口上的步骤有一些复杂
它不是将位图像线条一样直接画在窗口上的,而是通过内存句柄调用显示在窗口上的
如果要在窗体上显示位图,首先要把位图调入资源视图中
加载位图资源:将资源视图中的位图加载进来
static HBITMAP hBitMap; //位图句柄
static BITMAP BitMap; //位图结构体
其中位图结构体定义如下:
typedef struct tagBITMAP
{
LONG bmType; //位图类型
LONG bmWidth; //位图宽度
LONG bmHeight; //位图高度
LONG bmWidthBytes; //宽度所占字节
WORD bmPlanes;
WORD bmBitsPixel; //像素
LPVOID bmBits;
} BITMAP, *PBITMAP, NEAR *NPBITMAP, FAR *LPBITMAP;
加载位图:在窗口创建的时候进行加载
case WM_CREATE:
{
hBitMap = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_FUTURE)); //得到位图句柄
GetObject(hBitMap, sizeof(BITMAP), &BitMap); //将位图句柄传给位图结构体
//获取位图的宽度和高度
cxBitMap = BitMap.bmWidth;
cyBitMap = BitMap.bmHeight;
}break;
创建内存环境设备:
位图和窗口一样,专门需要一个句柄,用来存放位图,称为位图内存DC
HDC hdcMem; //位图的内存DC
将位图选入内存DC,用于在窗体上绘制
SelectObject(hdcMem, hBitMap); //将位图选入内存DC
使用BitBlt()函数进行绘制
//把内存DC中的位图拷贝到窗口DC中显示
BitBlt(hdc, 200, 200, cxBitMap, cyBitMap, hdcMem,0,0,SRCCOPY); //用拷贝的方式执行
参数说明:hdc是窗口句柄
200,200表示绘制的窗口起始坐标(就是从窗口的哪里开始绘制)
cxBitMap和cyBitMap为位图的大小,
0,0表示位图上的一个坐标,程序将从该坐标开始进行绘制
SRCCOPY表示用拷贝的方式执行操作
效果: