1. 程式人生 > >Windows程式設計 畫刷使用和建立

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

執行結果: