Windows程序设计 画刷使用和创建

填充绘制的封闭的绘制的图形需要用到画刷

winAPI自带画刷创建:

HBRUSH hBrush;
HDC hdc;
hdc = GetDC(hwnd);
hBrush = (HBRUSH)GetStockObject(GRAY_BRUSH); //表示获取系统灰色画刷
SelectObject(hdc,hBrush);
Rectangle(hdc,100,100,300,300);//绘制一个填充为灰色的矩形
RelaseDC(hwnd,hdc);

t同时也可以自定义画刷:

1.CreateSolidBrush

//创建一个用实现填充的画刷

WINGDIAPI HBRUSH  WINAPI CreateSolidBrush(

_In_ COLORREF color //RGB颜色

);

hBrush = (HBRUSH)CreateSolidBrush(RGB(60,38,99)); //表示获取系统灰色画刷
SelectObject(hdc,hBrush);
Rectangle(hdc,100,100,300,300);//绘制一个填充为RGB(60,38,99)的矩形

2.CreateHatchBrush

 WINGDIAPI HBRUSH  WINAPI CreateHatchBrush(

_In_ int iHatch,  //模式

_In_ COLORREF color //RGB颜色

);

iHatch模式有以下这几种:

#define HS_HORIZONTAL       0       /* ----- */
#define HS_VERTICAL         1       /* ||||| */
#define HS_FDIAGONAL        2       /* \\\\\ */
#define HS_BDIAGONAL        3       /* / */
#define HS_CROSS            4       /* +++++ */
#define HS_DIAGCROSS        5       /* xxxxx */

下面附上一段例子代码

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
	PAINTSTRUCT ps;
	POINT pt[5]{ {200,200},{280,450},{80,300},{320,300},{120,450} },apt[10];
	POINT pt2[5]{ { 600,200 },{ 680,450 },{ 480,300 },{ 720,300 },{ 520,450 } };
	static POINT aptFigure[10]{ 10,70,50,70,50,10,90,10,90,50,30,50,30,90,70,90,70,30,10,30 };
	static int cxClient, cyClient;
	HDC hdc;
	static HBRUSH hBrush;	//画刷句柄 用来填充图形
	static int i;
	switch (msg)
	{
	case WM_SIZE:
		cxClient = LOWORD(lParam);
		cyClient = HIWORD(lParam);
		return 0;
	case WM_PAINT:
		hdc = BeginPaint(hwnd, &ps);
		SetBkMode(hdc, TRANSPARENT);//设置背景模式不透明 OPAQUE不透明 TRANSPARENT透明
		/*hBrush = (HBRUSH)GetStockObject(GRAY_BRUSH);
		SelectObject(hdc, hBrush);*/
		hBrush = (HBRUSH)CreateHatchBrush(HS_HORIZONTAL, RGB(160, 165, 200));
		SelectObject(hdc, hBrush);
		//SelectObject(hdc, GetStockObject(NULL_PEN));//NULL不含边框
		//RoundRect(hdc, 60, 60, 200, 300, 30, 30);
		SetPolyFillMode(hdc,ALTERNATE);//设置polygon填充模式
		Polygon(hdc, pt, 5);	//自动将最后一个与第一个相连
		hBrush = (HBRUSH)CreateSolidBrush(RGB(36,200,168));
		SelectObject(hdc,hBrush);
		SetPolyFillMode(hdc, WINDING);//设置polygon填充模式
		Polygon(hdc, pt2, 5);	//自动将最后一个与第一个相连

		//***************************************************************************

		return 0;
	case WM_DESTROY:
		DeleteObject(hBrush);
		PostQuitMessage(0);
		return 0;
	}
	return DefWindowProc(hwnd, msg, wParam, lParam);
}

运行结果:

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值