文档章节

窗体操作:CBrush类

 野渡书生
发布于 2016/03/11 13:47
字数 1016
阅读 15
收藏 0

CBrush画刷定义了一种位图形式的像素,利用它可对区域内部填充颜色。

该类封装了Windows的图形设备接口(GDI)刷子。通过该类构造的CBrush对象可以传递给任何一个需要画刷的CDC成员函数。该画刷可以是实线、阴影线和某种图案

 

1. 构造CBrush对象

该类具有4个重载的构造函数,下面分别加以介绍

CBrush;

CBrush(COLORREF crColor);

CBrush(int nIndex,COLORREF crColor);

CBrush(CBitmap* pBitmap);

 

第一个构造函数构造了一支未被初始化的画刷,如果用户使用了该构造函数,则必须对所得到的CBrush对象进行初始化。

其他重的构造函数分别使用指定的颜色、限影线模式和颜色或位图指针来构造一支以被初始化的画刷。如果在调用过程中遇到错误,则会产生一个异常。

 

下面是对这些构造函数所用到的参数的详细说明:

参数crColor:以RGB颜色指定画刷的前景色。如果是表示阴影线的画刷,则该参数指定的是阴影线的颜色。

参数nIndex:指定了画刷的阴影线的风格

画刷的阴影线的样式

阴影线参数值 注释
HS_BDIAGONAL 从左到右向下成45度的对角线
HS_CROSS 水平线和垂直线相关的十字交叉线
HS_DIAGCROSS 夹角为45度的斜十字交叉线
HS_FDIAGONAL 从左到右向上成45度的对角线
HS_HORIZONTAL 水平阴影线
HS_VERTICAL 垂直阴影线

 

参数pBitmap:指向一个CBitmap对象,该对象指定了一幅画刷用来绘图的位图。

2。初始化CBrush对象

除了使用构造函数创建初始化过的画刷对象,还有以下几种初始化方法:

调用CBrush::CreateSolidBrush()成员函数来初始化实画刷,以便使用纯色来填充区域内部,该函数原型声明如下:

BOOL CreateSolidBrush(COLORREF crColor)

参数crColor指定了由结构COLORREF定义的画刷颜色,该颜色值是由定义在WINDOWS.H文件中的RGB宏指定的。

调用CBrush::CreateHatchBrush()成员函数来初始化阴影画刷,其原型声明如下:

BOOL CreateHatchBrush(int nIndex,COLORREF crColor);

参数与构造函数中的参数完全相同。

调用CBrush::CreatePatternBrush()成员函数初始化一个图形画刷,当使用该画刷填充图形时,图形内部将用位图一个接一个的填充。该函数原型声明如下:

BOOL CreatePatternBrush(CBitmap* pBitmap);

参数如前所述。

使用图形画刷需要注意的是在删除图形画刷时,与画刷相联系的位图并未被删除。位图必须被单独地删除。

调用CBrush::CreateBrushIndirect()成员函数来创建画刷对象,但画刷的属性并不是直接通过函数参数形式给出的,而是通过LOGBRUSH结构的成员变量间接的给出的。该函数原型声明如下:

BOOL CreateBrushIndirect(const LOGBURSH* lpLogBrush);

其中的lpLogBrushIndirect(const LOGBURSH* lpLogBrush);

其中的lpLogBrush参数是指向LOGBRUSH结构的指针。LOGBRUSH结构中包含有关画刷的信息。

函数如果调用成功,则返回非零值,否则返回零。

另外我们还可以使用CBrush::CreateDIBPatternBrush()成员函数来创建一个由设备无关位图(DIB)指定的图形画刷,该画刷可以被选进任何一种设备环境以便支持光栅操作。

 

应用CBrush对象进行绘图

方法一:使用成员函数CreateBrushIndirect来创建一个蓝色,风格为BS_HATCHED画刷对象来绘制一个具有十字交叉阴影线的矩形区域。 

 方法二:使用第二种构函数来创建一支绿色系统缺省的画刷并绘制一个不带任何阴影线的矩形区域

方法三:使用第三种构函数来创建一支红色,样式为HS_BDIAGONAL的画刷并绘制一个具有阴影线的矩形区域。

© 著作权归作者所有

共有 人打赏支持
粉丝 9
博文 217
码字总数 158821
作品 0
南京
如何对mfc窗体背景图片的设置

打开vc+的mfc工程,先载入一张图片,ID为IDB_BITMAP2 TestDlg.h中: CBrush m_brBk;//在public中定义 TestDlg.cpp中: 在初始化函数OnInitDialog()中加入: BOOL CTestDlg::OnInitDialog() { C...

crossmix
2015/10/07
1K
0
MFC(ActiveX编程,孙鑫C++第十八讲笔记整理)

一:在VB中调用X控件,添加方法 project->Add components。另外可以用Object Browser来查看控件 二:在VC中创建X控件 1.新建一个X工程名为Clock,注意一个文件中可以包含多个控件。 2.保持缺...

小青_1989
2014/04/28
0
0
VC 对话框设置背景颜色和图片

VC 对话框设置背景颜色和图片 改变背景颜色,有两种方法: 1、在app的初始化函数中调用: void SetDialogBkColor( COLORREF clrCtlBk = RGB(192, 192, 192), COLORREF clrCtlText = RGB(0, ...

IMGTN
2012/06/05
0
0
我用vc+仿照金山毒霸软件工具界面(创世纪篇)

金山毒霸软件软件很炫,一直想仿照,终于摸透它的程序开发原理。 说干就干,本着由浅入深的原则,我选择了金山毒霸的一个附带工具:Duba_GOP.exe来开刀。该工具在金山毒霸的网站上可以下载到...

crossmix
2015/11/06
0
0
如果在BackgroundWorker运行过程中关闭窗体…

在Windows Form应用中,BackgroundWorker 类允许您在单独的专用线程上运行操作。耗时的操作(如下载和数据库事务)在长时间运行时可能会导致用户界面 (UI) 似乎处于停止响应状态。如果您需要...

长平狐
2012/09/04
108
0

没有更多内容

加载失败,请刷新页面

加载更多

arts-week10

Algorithm 905. Sort Array By Parity - LeetCode Review Who’s Afraid of the Big Bad Preloader? 一文读懂前端缓存 一个网络请求3个步骤:请求,处理,响应,而前端缓存主要在请求处响应这两步...

yysue
52分钟前
0
0
00.编译OpenJDK-8u40的整个过程

前言 历经2天的折腾总算把OpenJDK给编译成功了,要说为啥搞这个,还得从面试说起,最近出去面试经常被问到JVM的相关东西,总感觉自己以前学的太浅薄,所以回来就打算深入学习,目标把《深入理...

凌晨一点
今天
4
0
python: 一些关于元组的碎碎念

初始化元组的时候,尤其是元组里面只有一个元素的时候,会出现一些很蛋疼的情况: def checkContentAndType(obj): print(obj) print(type(obj))if __name__=="__main__": tu...

Oh_really
昨天
6
2
jvm crash分析工具

介绍一款非常好用的jvm crash分析工具,当jvm挂掉时,会产生hs_err_pid.log。里面记录了jvm当时的运行状态以及错误信息,但是内容量比较庞大,不好分析。所以我们要借助工具来帮我们。 Cras...

xpbob
昨天
126
0
Qt编写自定义控件属性设计器

以前做.NET开发中,.NET直接就集成了属性设计器,VS不愧是宇宙第一IDE,你能够想到的都给你封装好了,用起来不要太爽!因为项目需要自从全面转Qt开发已经6年有余,在工业控制领域,有一些应用...

飞扬青云
昨天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部