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演示实例

时间: 2024-10-26 18:02:44

MFC画刷类CBrush使用实例 .的相关文章

MFC设置窗体背景图片(画刷) .

from:http://blog.csdn.net/leolee82/article/details/6992626   先载入一张图片,ID为IDB_BITMAP2 TestDlg.h中:CBrush m_brBk;//在public中定义TestDlg.cpp中:在初始化函数OnInitDialog()中加入:   [cpp] view plaincopyprint? BOOL CTestDlg::OnInitDialog()   {   CDialog::OnInitDialog();  

MFC绘图5--使用透明画刷

//创建透明画刷 CClientDC dc(this); //使用(HBRUSH)GetStockObject可以返回空画刷句柄,但CBrush //无法通过画刷句柄构造,可通过给其静态成员函数FromHandle传递HBRUSH //句柄获得CBrush指针 CBrush *pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH)); CBrush *pOldBrush=dc.SelectObject(pBrush); dc.Re

MFC绘图3--使用普通画刷

//使用普通画刷 CClientDC dc(this); CBrush brush(RGB(255,0,0)); dc.FillRect(CRect(m_ptOrigin,point),&brush);

生成随机字符串和验证码的类的PHP实例

 这篇文章主要介绍了生成随机字符串和验证码的类的PHP实例,有需要的朋友可以参考一下 网上有很多的php随机数与验证码的代码与文章,真正适用的没有几个.   索性自己搞一个吧.   开始本节的php教程 吧,以下代码的实现,主要做到可以很好区分一个get_code(),另一个create_check_image(),输出图像直接调用后面的,session()取验证码时直接get_code()就ok,顺带提下使用session时必须将session_star()放在最前面.   代码如下:   代

一个经典的PHP验证码类分享_php实例

我们通过PHP的GD库图像处理内容,设计一个验证码类Vcode.将该类声明在文件vcode.class.php中,并通过面向对象的特性将一些实现的细节封装在该类中.只要在创建对象时,为构造方法提供三个参数,包括创建验证码图片的宽度.高度及验证码字母个数,就可以成功创建一个验证码类的对象.该类的声明代码如下所示: <?php class Vcode { private $width; //宽 private $height; //高 private $num; //数量 private $code

8天入门wpf—— 第七天 画刷

               这一篇我们聊聊wpf中的画刷,在wpf中如果想玩各种花哨,那么如何使用画刷则是我们的基本功,首先看一下类图 从图中可以看出,wpf有5种画刷和1种自定义画刷,都是继承自基类Brush,我们看看基类中有哪些好玩的东西. 这里有3个比较感兴趣的属性,分别属于"透明度"和"图像转换",好,下面我们一一解说.   一:SolidColorBrush(实心画刷)     实心画刷是我们用的最多的,也是最简单的一个,其实也就是填充色的意思,一个很简

个人写的PHP验证码生成类分享_php实例

此验证码类直接拿去就可以用,也可以参考! 其中类成员codestr是生成的验证码字符串: <?php /** * 验证码 */ class Code{ // 1. 定义各个成员 有宽.高.画布.字数.类型.画类型 private $width; //宽度 private $height; //高度 private $num; //验证码字数 private $imgType; //生成图片类型 private $Type; //字串类型 1,2,3 三个选项 1 纯数字 2 纯小写字母 3 大小

Windows Phone开发(31):画刷

原文:Windows Phone开发(31):画刷 画刷是啥玩意儿?哈,其实画刷是用来涂鸦,真的,没骗你,至于你信不信,反正我信了. 本文通过价绍几个典型的画刷,使你明白画刷就是用来涂鸦的.   一.纯色画刷SolidColorBrush. 这个家伙比较"纯",当然它不是装纯,的确很纯,纯到只用一种颜色,所以叫"单色画刷". 来,看看这个示例,我们画一个矩形(放在一个Canvas中),然后用这个纯家伙来打扮一下. <Rectangle Canvas.Left=

可视化-OPENGL的画刷技术如何实现

问题描述 OPENGL的画刷技术如何实现 使用OPENGL做数据可视化,现在要实现一个功能,就是选取某个点的数据,然后相关联的线都高亮显示与其他数据的线相区别开,该用哪个函数啊?是OPENGL的选择功能吗?