绘制位图
位图从文件中加载到窗口的步骤:
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;
运行程序: