MFC画刷类CBrush使用实例 .

摘要:
画笔类CBrush使用画笔绘制图形的边界,并使用画笔为图形着色。笔刷由CBrush类管理。创建画笔有两种方法:一种是调用构造函数,另一种是使用相关的成员函数。2.除了构造函数之外,CBrush还提供了六个用于创建笔刷的成员函数:BOOLCreateSolidBrush。此函数用于创建填充笔刷。BOOLCreateSysColorBrush此函数使用系统颜色设置笔刷,nIndex指定为笔刷的图案类型。3.CBrush演示实例创建了一个基于对话框的应用程序BrushDemo。

画刷类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所示。
MFC画刷类CBrush使用实例 .第1张
图1 CBrush演示实例

免责声明:文章转载自《MFC画刷类CBrush使用实例 .》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇CKEditor上传图片—配置CKFinderMysql-锁下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MFC的简单加法器(二)

   创建对话框主要分两大步,第一,创建对话框资源,主要包括创建新的对话框模板、设置对话框属性和为对话框添加各种控件;第二,生成对话框类,主要包括新建对话框类、添加控件变量和控件的消息处理函数等。鸡啄米在本节中先讲讲怎样创建对话框模板和设置对话框属性。        创建基于对话框的应用程序框架        之前鸡啄米创建的HelloWorld程序是单文...

MFC下CSocket编程详解

MFC下CSocket编程详解: 1. 常用的函数和注意事项(详细的函数接口说明请查看MSDN):     CSocket::Create 初始化(一般写服务器程序都不要用为好,用下面的 CSocket::Socket 初始化)    CSocket::Socket初始化     CSocket::SetSockOpt 设置socket选项     CS...

iOS开发UI篇—Button基础

iOS开发UI篇—Button基础 一、简单说明 一般情况下,点击某个控件后,会做出相应反应的都是按钮 按钮的功能比较多,既能显示文字,又能显示图片,还能随时调整内部图片和文字的位置 二、按钮的三种状态 normal(普通状态) 默认情况(Default) 对应的枚举常量:UIControlStateNormal highlighted(高亮状态) 按钮被...

【转】VC 模式对话框和非模式对话框的创建,销毁和区别

原文网址:http://blog.csdn.net/mycaibo/article/details/6002151 VC 模式对话框和非模式对话框的创建,销毁和区别  在WIN32中,模式对话框的创建一般是使用DialogBox来进行创建的。而非模式对话框则是利用CreateWindow来创建的。在MFC或是WTL中,模式对话框一般是使用DoModal,...

MFC执行过程详解

1.CObject类为MFC总类,该类下面有一个重要的类CCmdTarget。而CCmdTarget类下面又有四个重要的继承类,分别为:CWinThread、CDocument、CDocTemplate、       CWnd类。所以,可以得出一个大概继承图,如图所示:                    CObject--->CCmdTarget...

MFC中使用Tab Control从CTabCtrl控件类继承自己的类(CTabSheet)来处理。

使用Tab Control,并且从CTabCtrl控件类继承自己的类(CTabSheet)来处理。首先我先介绍一下如何使用CTabSheet。先要制作子对话框类,这次的子对话框类不要从CPropertyPage继承,而是直接从CDialog继承。并且各个子对话框资源的属性应设置为:Style为Child, Border为None。在主对话框资源中,加入一个...