今天介绍win32GDI的最后一部分:位图的绘制
使用的开发环境仍然是vs2013, 语言C/C++, 创建的是win32项目
为了能说明位图的绘制的注意事项,我找了两张图片如下
做成的效果如下
1、加载背景图片
为了能让图片不断的刷新,我们肯定是要用peermessage(),部分代码如下:
// 主消息循环: ZeroMemory(&msg, sizeof(MSG)); while(msg.message != WM_QUIT) { if (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) { TranslateMessage(&msg); DispatchMessage(&msg); } }
然后我们需要加载图片,和画刷,画笔不一样。图片win32是不会预留的,需要我们自己创建。
所以我们要在消息循环前面完成图片的加载。
1、获得主DC
2、获得主DC兼容DC
3、定义创建加载位图句柄
4、将位图句柄关联到兼容DC
5、释放主DC
代码如下
主要用到2个函数
LoadImage()加载图片
HANDLE LoadImage
( HINSTANCE hinst, //实例句柄
LPCTSTR lpszName, // 图片名
UINT uType, //图片类型
int cxDesired, // 图片宽 给0代表默认的图片的宽
int cyDesired, //图片高 给0代表默认的图片高
UINT fuLoad ); //图片的加载方式
CreateCompatibleDC()创建兼容dc
HDC CreateCompatibleDC ( HDC hdc );/ /handle to DC
HDC hdc = GetDC(g_hWnd); //定义初始化背景位图句柄 HBITMAP hBitMapBK = (HBITMAP)LoadImage(hInstance, _T("bk.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE); //创建背景主DC兼容DC HDC Bkhdc = CreateCompatibleDC(hdc); //将背景句柄关联到兼容DC SelectObject(Bkhdc, hBitMapBK); //释放主DC ReleaseDC(g_hWnd, hdc);
然后我们就可以在消息循环里面贴图
用到函数bitblt()
HDC hdc = GetDC(g_hWnd)