绘制位图
位图从文件中加载到窗口的步骤:
1,加载位图 LoadImage
2,建立与窗口DC兼容的内存DC
CreateCompatibleDC ()建立内存DC
DeleteDC() 释放DC
3,选用位图对象
4,贴图
使用BitBlt 把内存DC中的位图复制到显示的DC上。
在VC++ 中新建win32程序,选择默认的生成框架。接下来只去修改和添加代码。
加入全局声明变量:
HBITMAP hbmp;// 位图对象
HDC mdc;// 用于保存位图的内存DC
在VC自动生成的代码中找到InitInstance()函数
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;
hInst = hInstance; // 将实例句柄存储在全局变量中
HDC hdc;
hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
if (!hWnd)
{
return FALSE;
}
ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);
hdc = GetDC(hWnd);
mdc = CreateCompatibleDC(hdc);
hbmp = (HBITMAP)LoadImage(NULL, L"bg.bmp", IMAGE_BITMAP, 500, 500, LR_LOADFROMFILE);
SelectObject(mdc, hbmp);//选择内存DC 位图对象
BitBlt(hdc, 0, 0, 500, 500, mdc, 0, 0, SRCCOPY);
/*表示从目标内存DC:mdc中的位图从(参数7,8)坐标0,0的地方开始复制500,500的区域*/
ReleaseDC(hWnd, hdc);//释放内存DC
return TRUE;
}
在WndProc函数中添加重绘消息
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: 在此添加任意绘图代码...
BitBlt(hdc, 0, 0, 500, 500, mdc, 0, 0, SRCCOPY);
EndPaint(hWnd, &ps);
break;