MFC-画刷

在GDI中,用HBRUSH来表示画刷。H是代表句柄的意思。

在GDI中,填充矩形,填充圆,填充饼等以及刷窗口背景都是通过画刷来操作的。

GDI默认的画刷是白色的画刷

WIN32

单色的画刷 

复制代码
    HDC hdc = ::GetDC(m_hWnd);
    ::MoveToEx(hdc, 0, 0, NULL);
    HPEN hpen = CreatePen(PS_SOLID, 10, RGB(0, 0, 255));
    SelectObject(hdc, hpen);
    
    
    HBRUSH hbr;
    hbr = CreateSolidBrush(RGB(255, 0, 0));    //单色的画刷
    SelectObject(hdc, hbr);
    Rectangle(hdc, 0, 0, 200, 200);

    DeleteObject(hpen);
    DeleteObject(hbr);//删除画刷
    ::ReleaseDC(m_hWnd, hdc);
复制代码

特定颜色的画刷 

复制代码
    HDC hdc = ::GetDC(m_hWnd);
    ::MoveToEx(hdc, 0, 0, NULL);
    HPEN hpen = CreatePen(PS_SOLID, 10, RGB(0, 0, 255));
    SelectObject(hdc, hpen);

    HBRUSH hbr;
    hbr = (HBRUSH)GetStockObject(BLACK_BRUSH);  
    //只能取特定颜色的画刷,如BLACK_BRUSH,GRAY_BRUSH等刷
    /*
    GDI预定义了以下库存画刷:
    BLACK_BRUSH        黑色画刷
    DKGRAY_BRUSH       暗灰色画刷
    GRAY_BRUSH         灰色画刷
    LTGRAY_BRUSH       浅灰色画刷
    WHITE_BRUSH        白色画刷
    NULL_BRUSH         空画刷
    DC_BRUSH           DC画刷
    HOLLOW_BRUSH       空心刷(相当于NULL_BRUSH)
        
    */

    SelectObject(hdc, hbr);
    Rectangle(hdc, 0, 0, 200, 200);

    DeleteObject(hpen);
    DeleteObject(hbr);//删除画刷
    ::ReleaseDC(m_hWnd, hdc);
复制代码

 

位图画刷

复制代码
    HDC hdc = ::GetDC(m_hWnd);
    ::MoveToEx(hdc, 0, 0, NULL);
    HPEN hpen = CreatePen(PS_SOLID, 10, RGB(0, 0, 255));
    SelectObject(hdc, hpen);

    HBRUSH hbr;
    HBITMAP   hBmp = NULL;

    CString str = _T("D:\\1.bmp");
    hBmp = (HBITMAP)::LoadImage(NULL, str, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    
    hbr = CreatePatternBrush(hBmp);    //创建位图画刷
    /*
    参数:HBITMAP hbm  逻辑画笔的位图的句柄
    返回值:如果函数成功,则返回值标识逻辑画笔。
            如果函数失败,则返回值为 NULL
    */
        
    
    
    SelectObject(hdc, hbr);
    

    CRect rect= CRect(10, 10, 110, 210);
    FillRect(hdc, &rect, hbr);

    DeleteObject(hpen);
    DeleteObject(hbr);//删除画刷
    ::ReleaseDC(m_hWnd, hdc);
复制代码

 

带阴影的画刷

复制代码
    HDC hdc = ::GetDC(m_hWnd);
    ::MoveToEx(hdc, 0, 0, NULL);
    HPEN hpen = CreatePen(PS_SOLID, 10, RGB(0, 0, 255));
    SelectObject(hdc, hpen);

    HBRUSH hbr;
    hbr = CreateHatchBrush(HS_BDIAGONAL, RGB(0, 0, 255));    //创建一个具有指定阴影模式和颜色的逻辑刷子
    /*
    参数1:int fnStyle 画笔的阴影样式。 此参数的取值可为下列值之一:
            HS_BDIAGONAL:表示45度向上,从左至右的阴影(/////)
            HS_CROSS:水平和垂直交叉阴影(+++++);
            HS_DIAGCROSS:45度交叉阴影(XXXXX);
            HS_FDIAGONAL:45度向下,从左至右阴影(\\\\\\);
            HS_HORIZONTAL:水平阴影(-----);
            HS_VERTICAL:垂直阴影(|||||)
    参数2:COLORREF clrref 指定用于阴影的刷子的前景色,请使用 RGB 宏
    返回值:如果函数成功,则返回值标识逻辑画笔。
            如果函数失败,则返回值为 NULL
    */

    SelectObject(hdc, hbr);
    CRect rect = CRect(10, 10, 110, 210);
    FillRect(hdc, &rect, hbr);

    DeleteObject(hpen);
    DeleteObject(hbr);//删除画刷
    ::ReleaseDC(m_hWnd, hdc);
复制代码

 

LOGBRUSH结构体 

复制代码
    HDC hdc = ::GetDC(m_hWnd);
    ::MoveToEx(hdc, 0, 0, NULL);
    HPEN hpen = CreatePen(PS_SOLID, 10, RGB(0, 0, 255));
    SelectObject(hdc, hpen);

    HBRUSH hbr;

    LOGBRUSH rush = { BS_SOLID,RGB(0,0,255) };//定义画刷的样式、颜色和图案
    /*
    参数1:UINT lbStyle  画笔样式。 lbStyle 成员必须是以下样式之一
            BS_DIBPATTERN    由独立于设备的位图定义的模式画笔 (DIB) 规范
            BS_DIBPATTERN8X8    请参阅BS_DIBPATTERN。
            BS_DIBPATTERNPT    由独立于设备的位图定义的模式画笔 (DIB) 规范
            BS_HATCHED    阴影画笔
            BS_HOLLOW    空心画笔
            BS_NULL        与BS_HOLLOW相同
            BS_PATTERN    内存位图定义的图案画笔
            BS_PATTERN8X8    请参阅BS_PATTERN
            BS_SOLID    纯色画笔

    参数2:COLORREF  lbColor 画刷的颜色
            如果 lbStyle 是BS_HOLLOW或BS_PATTERN样式,则 忽略 lbColor
            如果 lbStyle 是BS_DIBPATTERN还是BS_DIBPATTERNPT,lbColor 成员必须是下列值之一
                    DIB_PAL_COLORS    颜色表由 16 位索引组成的数组组成到当前实现的逻辑调色板中
                    DIB_RGB_COLORS    颜色表包含文字 RGB 值
    参数3:ULONG_PTR lbHatch  阴影样式
            如果 lbStyle BS_DIBPATTERN, lbHatch 成员包含打包的 DIB 的句柄
            如果 lbStyle BS_DIBPATTERNPT, lbHatch 成员包含指向打包的 DIB 的指针
            如果 lbStyle BS_HATCHED, lbHatch 成员指定用于创建阴影的线条的方向。 可以是下列值之一
                    HS_BDIAGONAL    向上 45 度、从左到右的阴影
                    HS_CROSS    水平和垂直交叉阴影
                    HS_DIAGCROSS    45 度交叉线
                    HS_FDIAGONAL    45 度向下、从左到右的阴影
                    HS_HORIZONTAL    水平阴影
                    HS_VERTICAL    垂直阴影
            如果 lbStyle BS_PATTERN, lbHatch 是定义模式的位图的句柄。 位图不能是 由 CreateDIBSection 函数创建的 DIB 节位图
            如果 lbStyle BS_SOLID 或 BS_HOLLOW,则 lbHatch 将被忽略
    
    
    
    
    */


    hbr = CreateBrushIndirect(&rush);//创建具有指定样式、颜色和图案的逻辑画刷
    /*
    参数:指向 LOGBRUSH 结构的指针,其中包含有关画刷的信息
    返回值:如果函数成功,则返回值将标识逻辑画刷
            如果函数失败,则返回值为 NULL
    如果不再需要画刷,请调用 DeleteObject 函数将其删除
        
    */

    SelectObject(hdc, hbr);
    CRect rect = CRect(10, 10, 110, 210);
    FillRect(hdc, &rect, hbr);

    DeleteObject(hpen);
    DeleteObject(hbr);//删除画刷
    ::ReleaseDC(m_hWnd, hdc);
复制代码

 

系统颜色画刷 

看:https://www.cnblogs.com/liming19680104/p/17323502.html  

 

 

 

 

 

 

MFC

 

 

 

 

 

 

 

posted @   天子骄龙  阅读(141)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
历史上的今天:
2022-04-09 浩辰CAD-图层管理
2019-04-09 第十章第一节 浮力
点击右上角即可分享
微信分享提示

目录导航