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);
}
运行结果: