Go homepage(回首页)
Upload pictures (上传图片)
Write articles (发文字帖)

The author:(作者)qq
published in(发表于) 2014/7/9 22:40:11
visual c++中的画刷类CBrush使用实例

visual c++中的画刷类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}; //笔刷的花纹类型


If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)





QQ:154298438
QQ:417480759