Win32学习(第七天)gdi位图

本文介绍了Windows GDI绘图的基本操作,包括画刷、画笔的使用,以及如何绘制矩形、圆等基本图形,并展示了如何加载和显示位图。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gdi对象,在同一时刻只能使用同一类gdi对象(如画刷)
画刷
如果没有设置画刷,体统提供了一只白色的画刷,画了一个区域,这个区域是有描边。
在使用画刷画区域的时候,如果没有做任何gdi对象的设定,系统默认使用白色的画刷填充区域,默认使用黑色的笔来描边。

case WM_LBUTTONDOWN:
	{
		hdc = GetDC(hWnd);
		//画刷和画笔操作
		//HBRUSH hb= nullptr;//画刷句柄
		////hb = (HBRUSH)GetStockObject(BLACK_BRUSH);//得到系统预设的画刷,黑边白底
		////Rectangle(hdc, 100, 100, 200, 200);
		//hb = CreateSolidBrush(0xff);//创建一个纯色的画刷
		////hb = CreateHatchBrush(HS_BDIAGONAL, 0xff);//创建一个风格画刷
		//SelectObject(hdc, hb);
		//HPEN hp = CreatePen(PS_SOLID, 2, 0xff);//把边框的颜色给填上
		//SelectObject(hdc, hp);
		//Rectangle(hdc, 100, 100, 200, 200);//填充矩形
		//Pie(hdc, 300, 300, 500, 500, 0, 0, 400, 400);//画饼图
		//Chord(hdc, 100, 100, 600, 400, 0, 0, 350, 400);
		//DeleteObject(hb);
		//DeleteObject(hp);
		//画刷操作2
		HBRUSH hb2 = CreateHatchBrush(HS_BDIAGONAL, 0xff0000);
		HPEN hp1 = CreatePen(PS_SOLID, 2, 0xff0000);
		SelectObject(hdc, hb2);
		SelectObject(hdc, hp1);
		Ellipse(hdc, 200, 200, 600, 400);//填充圆
		DeleteObject(hb2);
		DeleteObject(hp1);
		//位图操作
		HBRUSH hb1 = nullptr;
		HBITMAP hbit = (HBITMAP)LoadImage(hInst, _T("2.bmp"), IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
		hb1 = CreatePatternBrush(hbit);//创建位图画刷
		SelectObject(hdc, hb1);
		Rectangle(hdc, 100, 100, 400, 400);//填充矩形
		DeleteObject(hb1);
		DeleteObject(hbit);
		ReleaseDC(hWnd, hdc);
	}
		break;

字体

	case WM_LBUTTONDOWN:
  {//字体
	hdc = GetDC(hWnd);
	HFONT hfont = nullptr;
	//hfont = (HFONT)GetStockObject(OEM_FIXED_FONT);检索句柄股票画笔,笔刷,字体,或调色板之一
	hfont = CreateFont(40,//字体的高度 
		0,//字体的宽度
		0,//文字的倾斜角度
		0,//基线的倾斜程度
		0,//笔画的粗细,400以下为细体,700以上为粗体
		true,//斜体
		true,//下划线
		true,//水平线 
		ANSI_CHARSET,//字符集
		0, 0, 0, 0, 
		_T("楷体"));//字样名
	SelectObject(hdc, hfont);
	//锚点 默认为左上角
	for (int i = -1; i < 2; ++i)
	{
		for (int j = -1; j < 2; ++j)
		{
			SetPixel(hdc, 300+i, 200+j, 0xff);
		}
	}
	HBRUSH hr = CreateSolidBrush(0xff0000);
	SelectObject(hdc, hr);
	Rectangle(hdc, 0, 0, 1000, 600);
	DeleteObject(hr);
	//hdc上面的所有文字显示都会以右下角为锚点
	SetTextAlign(hdc, TA_BOTTOM | TA_RIGHT);//修改文字对齐方式
	SetTextColor(hdc, 0xff);//修改文字颜色
	//SetBkColor(hdc, 0xff0000);//设置文字的背景色
	SetBkMode(hdc, TRANSPARENT);//OPAQUE 默认模式,用自身背景色来填充整个背景
	TextOut(hdc, 300, 200, _T("hello"),_tcslen(_T("hello")));
	//DrawText();//在区域中显示文字
	DeleteObject(hfont);
	ReleaseDC(hWnd, hdc);
	}
		break;

位图:
gdi里面只支持位图(.bmp),jpg,png格式可以用格式化工厂进行修改成bmp格式使用

case WM_LBUTTONDOWN:
	{
		hdc = GetDC(hWnd);
		HDC bitDc = CreateCompatibleDC(hdc);//该函数创建一个与应用程序的当前显示器兼容的内存设备上下文环境
		HBITMAP hbit = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_BITMAP1));//加载LoadBitmap资源(需要先设定好资源)
		SelectObject(bitDc, hbit);
		BitBlt(hdc, 50, 50, 1024, 768, bitDc, 0, 0,SRCCOPY);//,将一幅位图从一个设备场景复制到另一个
		DeleteObject(hbit);
		DeleteDC(bitDc);
		ReleaseDC(hWnd, hdc);
	}
		break;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值