Windows API学习-GDI绘图基础与轻量进阶(7)


创建和使用画刷

Windows API 中有两个函数可以用来创建画刷。

CreateSolidBrush 函数可以用来创建一个指定颜色的实心画刷,原型为:

HBRUSH CreateSolidBrush( COLORREF crColor );  // crColor为画刷颜色

CreateHatchBrush 函数可以用来创建一个指定颜色的含有特定阴影样式的画刷,原型为:

HBRUSH CreateHatchBrush(
    int fnStyle,  //画刷样式
    COLORREF crColor  //画刷颜色
);

nStyle 可以有6种取值:

HS_BDIGONAL:45度向上,自左至右的阴影(///)
HS_CROSS:表示水平直线和垂直直线交叉阴影(+++)
HS_DIAGCROSS:45度交叉阴影(XXX)
HS_FDIAGONAL:45度向下自左至右的阴影(\\\)
HS_HORIZONTAL:水平阴影(---)
HS_VERTICAL:垂直阴影

画刷使用举例:

//窗口过程
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
    PAINTSTRUCT ps;
    HDC hdc;
    //定义两个画刷,请定义为静态变量
    static HBRUSH hSolidBrush;
    static HBRUSH hHatchBrush;
    switch (message){
        case WM_CREATE:
            //创建蓝色实心画刷,保存句柄到 hSolidBrush 变量
            hSolidBrush = CreateSolidBrush(RGB(0, 0, 255));
            //创建绿色交叉阴影画刷,保存句柄到 hHatchBrush 变量
            hHatchBrush = CreateHatchBrush(HS_DIAGCROSS,RGB(0,255,0));
            break;
        case WM_PAINT:
            hdc = BeginPaint(hWnd, &ps);
            //选入蓝色实心画刷到设备环境
            SelectObject(hdc, hSolidBrush);
            Rectangle(hdc, 0, 0, 200, 100); //绘制矩形
            //选入绿色交叉画刷到设备环境
            SelectObject(hdc, hHatchBrush);
            Ellipse(hdc,0,100,200,200); //绘制椭圆
            EndPaint(hWnd, &ps);
            break;
        case WM_DESTROY:
            //请做好善后工作,处理 WM_DESTROY 消息时删除之前我们创建的一切GDI对象。
            DeleteObject(hSolidBrush);
            DeleteObject(hHatchBrush);
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

运行效果:
1.png