zoukankan      html  css  js  c++  java
  • MFC画刷类CBrush使用实例 .

    画刷类CBrush
    利用画笔可以画图形的边框,而用画刷就可以在图形内着色。大多数的GDI绘图函数既使用画笔又使用画刷,它们用画笔绘制各种图形的周边,而用画刷填充图形,因而可以用一种颜色和风格去设置画笔,而用另一种颜色和风格去设定画刷,通过一次函数调用就可以绘制出形状复杂的图形。
    画刷是由CBrush类管理的,创建画刷有两种方法:一种是调用构造函数,另一种是调用相关的成员函数。
    1.CBrush的构造函数
    CBrush类的结构函数定义如下:
    ① CBrush( );
    ② CBrush( COLORREF crColor );
    throw( CResourceException );
    ③ CBrush( int nIndex, COLORREF crColor );
    throw( CResourceException );
    ④ CBrush( CBitmap* pBitmap );
    throw( CResourceException );
    参数说明:
    crColor:设定画笔颜色。
    NIndex:如果画刷是带花纹的,则该参数设定画刷的花纹类型,其取值如下:
    l HS_BDIAGONAL:为左高右低的45度斜花纹。
    l HS_CROSS:为由水平线和垂直线构成的方格花纹。
    l HS_DIAGCROSS:为斜45度方格花纹。
    l HS_FIDAGONAL:为右高左低的45度斜花纹。
    l HS_HORIZONTAL:为水平线花纹。
    l HS_VERTICAL:为垂直线花纹。
    PBitmap:为CBitmap类的指针,用于指定填充时所使用的位图。
    2.CBrush提供的创建画笔的成员函数
    除了构造函数,CBrush还提供了6个创建画刷的成员函数:
    BOOL CreateSolidBrush( COLORREF crColor )
    该函数创建一个实填充的画刷。crColor为填充色。
    BOOL CreateHatchBrush( int nIndex, COLORREF crColor )
    该函数创建一个带花纹的画刷,nIndex为花纹类型,crColor为画刷颜色。
    BOOL CreateBrushIndirect( const LOGBRUSH* lpLogBrush )
    调用该函数可以通过LOGBRUSH结构生成一个画刷,LOGBRUSH结构的定义如下:
    typedef struct tag LOGBRUSH {
    UINT lbStyle;
    COLORREF lbColor;
    LONG lbHatch;
    } LOGBRUSH;
    其中lbStyle指定的是画刷的类型,lbColor指定画刷的颜色,lbHatch指定的是画刷的花纹类型。
    BOOL CreatePatternBrush( CBitmap* pBitmap )
    创建一个使用位图填充的画刷,画刷的位图由pBitmap指定,位图大小必须8×8。
    BOOL CreateDIBPatternBrush( HGLOBAL hPackedDIB, UINT nUsage )
    BOOL CreateDIBPatternBrush( const void* lpPackedDIB, UINT nUsage )
    创建使用DIB(设备无关位图)的画刷,其中hPackedDIB指向存储位图数据的内存块的地址,lpPackedDIB指向DIB位图数据的指针,nUsage用于设定调色板的属性。
    BOOL CreateSysColorBrush( int nIndex )
    该函数设定带有系统色的画刷,nIndex指定为画刷的花纹类型。
    3.CBrush演示实例
    (1)创建一个基于对话框的应用程序BrushDemo。
    (2)向CBrushDemoDlg类中添加一个成员函数RunBrush(),它主要完成在指定区域绘制指定矩形的功能。添加RunBrush()成员函数的代码如下:
    void CBrushDemoDlg::RunBrush(CPaintDC* dc,CRect rect, COLORREF col,CString text, LONG lbHatch)
    {
    CBrush cbrush;
    CBrush* pBrush; //旧笔刷
    cbrush.CreateHatchBrush(lbHatch,col); //建立带花纹笔刷
    dc->DrawText(text,&rect,DT_CENTER|DT_WORDBREAK); //写提示文本
    rect.top=rect.top+40; //调整矩形区域
    pBrush=dc->SelectObject(&cbrush); //载入笔刷
    dc->Rectangle(&rect); //绘制矩形
    dc->SelectObject(pBrush); //恢复笔刷
    cbrush.DeleteObject();
    pBrush->DeleteObject();
    }
    (3)找到CBrushDemoDlg::OnDrow()函数,修改这个函数的内容:
    void CBrushDemoDlg::OnPaint()
    {
    CPaintDC dc(this);
    //背景填充为白色,不建议这么做
    CRect rect,fillrect;
    CBrush brush;
    brush.CreateSolidBrush(RGB(255,255,255));
    this->GetClientRect(&rect);
    dc.FillRect(&rect,&brush); //用FillRect成员函数利用笔刷填充指定区域
    brush.DeleteObject();
    //画矩形区域
    int left=10;
    const int MAX=6;
    fillrect.top=rect.top+10;
    fillrect.bottom=rect.bottom-10;
    long style[MAX]={HS_BDIAGONAL,HS_CROSS,HS_DIAGCROSS,\
    HS_FDIAGONAL,HS_HORIZONTAL,HS_VERTICAL}; //笔刷的花纹类型

    CString text[MAX]={"剖 面 线\n从左到右","网 格 线",\
    "斜网格线","剖 面 线\n从右到左","水 平 线","垂 直 线"}; //提示文本
    for(int i=0;i<MAX;i++)
    {
    fillrect.left=left;
    fillrect.right=fillrect.left+100;
    left=fillrect.right+10;
    //利用"RGB((i+1)*255/MAX,0,(MAX-i)*255/MAX)"产生不同的颜色
    RunBrush(&dc,fillrect,RGB((i+1)*255/MAX,0,(MAX-i)*255/MAX),text[i],style[i]);
    }
    }
    (4)运行效果如图1所示。

    图1 CBrush演示实例

  • 相关阅读:
    Hibernate(九)HQL查询
    Hibernate(八)多对多映射
    Hibernate(七)一对一映射
    Hibernate(六)一对多映射(多对一)
    Hibernate(五)基本数据类型
    Hibernate(四)结构-基础语义和事务
    Hibernate(三)结构-配置文件-实体映射及配置文件
    Hibernate框架简介(二)基本使用增、删、改、查
    Hibernate生成实体类-手工写法(一)
    Java从零开始学四十(反射简述一)
  • 原文地址:https://www.cnblogs.com/lidabo/p/2595411.html
Copyright © 2011-2022 走看看