windows编程笔记【九】使用图片资源

在GDI中使用图片资源需要需要以下的步骤:

  1. 从文件中加载图片到(BITMAP)对象里
  2. 建立一个余窗口DC兼容的内存DC
  3. 内存DC使用步骤1的对象
  4. 把内存DC内容粘贴到窗口DC里

 

步骤1:

使用LoadImage函数读取图像。

HBITMAP hbmp; //定义一个HBITMAP变量
hbmp = (HBITMAP)LoadImage(NULL, "r_map.bmp", IMAGE_BITMAP, 600, 450, LR_LOADFROMFILE);//读取r_map.bmp到hbmp里

 

步骤2:

建立与窗口DC兼容的内存DC。

内存DC不是真正的设备DC,可以说他是一个缓冲区,win里不允许直接上窗口DC里写入,只能通过内存DC粘贴到窗口DC里。

HDC mdc;//定义内存DC
mdc = CreateCompatibleDC(hdc); //填入窗口DC即可

 

步骤3:

选用内存贴图

这一步把我们读取的图片对象(HBITMAP)复制到内存DC里。

SelectObject(mdc,hbmp); 

 

步骤四:

贴图,把内存DC中的位图复制显示到DC上,这个操作被称为 “贴图”。贴图中使用的函数是BitBlt()

BitBlt(hdc, 50, 50, 350, 250, mdc, 200, 100, SRCCOPY);

BitBlt函数参数有必要说下,是这样的。

BitBlt(目标dc, 目标dc x坐标, 目标dc y坐标, 贴到的宽度, 贴到的高度, 内存DC, 内存DC X坐标, 内存DC Y坐标, SRCCOPY);

 

放一下全部的代码:

BOOL InitInstance(HINSTANCE hinstance)
{
	HWND hwnd;
	HDC hdc;
	HDC bufdc;
	if (!(hwnd = CreateWindowEx(NULL,
		"WINCLASS1",	//winclass.lpszClassName设置的字符,是类的别名。
		"YouWindows",	//窗口的名称
		WS_OVERLAPPEDWINDOW | WS_VISIBLE,	//一些窗口属性
		0, 0,			//窗口位置
		600, 450,		//窗口宽高
		NULL,			//父窗口句柄
		NULL,			//附属窗口句柄
		hinstance,		//WinMain第一个实参,程序句柄。
		NULL			//null就可以了
	)))
		return false;

	hdc = GetDC(hwnd); //获得窗口DC
	mdc = CreateCompatibleDC(hdc); //创建于窗口DC匹配的内存DC
	hbmp = (HBITMAP)LoadImage(NULL, "r_map.bmp", IMAGE_BITMAP, 800, 600, LR_LOADFROMFILE); //读取图片
	SelectObject(mdc, hbmp);//把图片写入到内存dc里
	MyPaint(hdc);//调用一下绘图函数
	return true;
}

void MyPaint(HDC hdc)
{
	BitBlt(hdc, 0, 0, 800, 600, mdc, 0, 0, SRCCOPY); //贴图到内存dc
}

 效果如下

发布了30 篇原创文章 · 获赞 56 · 访问量 3万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览