现在的位置: 首页 > 综合 > 正文

Visual C++ 绘制位图

2018年04月02日 ⁄ 综合 ⁄ 共 958字 ⁄ 字号 评论关闭

绘制位图

位图从文件中加载到窗口的步骤:

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;

运行程序:

抱歉!评论已关闭.