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);
}

运行结果:

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