0
点赞
收藏
分享

微信扫一扫

Windows程序设计:位图的显示


在WIN32中,将位图显示在窗口上的步骤有一些复杂

它不是将位图像线条一样直接画在窗口上的,而是通过内存句柄调用显示在窗口上的

如果要在窗体上显示位图,首先要把位图调入资源视图中

Windows程序设计:位图的显示_句柄


加载位图资源:将资源视图中的位图加载进来

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表示用拷贝的方式执行操作


效果:

Windows程序设计:位图的显示_句柄_02





举报

相关推荐

0 条评论