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
}

 效果如下

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值