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的画刷并绘制一个具有阴影线的矩形区域。

窗体操作:CBrush类的更多相关文章

  1. Python窗体操作函数

    实现了一个window下对窗体操作的类,实现的功能如:移动窗体.获取窗体位置和大小.截取窗体图片.坐标转换等. 直接上代码: # coding=utf-8 import win32con import ...

  2. C# 委托实例(跨窗体操作控件)

    在C#里面却是可以不用自定义消息这么复杂的方法来实现跨窗体调用控件,C#有更好的办法就是委托. 效果描述:有两个窗体,FORM1(一个名为“打开form2”的button控件)和FORM2(一个名为“ ...

  3. winform里操作打开在panel里的form窗体,子窗体操作同级子窗体或者父窗体的方法

    最近开始了一个winform项目,原先一直都是web项目.遇到个问题,就是在框架内,左侧和中间的main都是用panel来实现的form,就是把form窗体打开到panel里,实现左侧是导航,中间是操 ...

  4. Winform跨窗体操作控件(使用委托)

    Winform跨窗体操作控件是winform开发中很常见的形式,最常见且简单有效的方式便是使用委托的方式来进行操作,下面我将通过一个小实例来说明如何使用委托跨窗体实现控件操作. 实例介绍:两个窗体,F ...

  5. CS中窗体的基类(BaseForm)注意点

    窗体基类最好新建一个窗体(BaseForm) 1.这样能够保证在VS中保证他的派生窗口也能够可视化. 2.如果基类直接是一个cs类文件,对于处理派生窗口就很复杂,比如按钮权限之类的操作; 如果直接继承 ...

  6. XML格式示例 与 XML操作(读取)类封装

    header('Content-Type: text/xml'); <?xml version="1.0" encoding="utf-8" standa ...

  7. WinForm 多窗体操作

    1多窗体操作:确定哪个是主窗体 通过窗体进入其他窗体 代码如下 Form2 f2 = new Form2();//f2窗体实例化出来 f2.Show();//进入f2窗体 this.Hide();// ...

  8. 简洁的PHP操作SQLite类

    SQLite是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了. ...

  9. C#工具类:Json操作帮助类(转载)

    原文转载自C#工具类:Json操作帮助类_IT技术小趣屋. Json序列化和反序列化在程序开发中时常会遇到,在C#中可以使用很多种方法实现对数据的Json序列化和反序列化,封装一个Json操作工具类来 ...

  10. 【转载】C#工具类:Json操作帮助类

    Json序列化和反序列化在程序开发中时常会遇到,在C#中可以使用很多种方法实现对数据的Json序列化和反序列化,封装一个Json操作工具类来简化相应的操作,该工具类中包含以下功能:对象转JSON.数据 ...

随机推荐

  1. 【0.3】mysql复制的日常管理维护,mysql复制常见问题处理

    [1]复制的日常管理 #复制的日常管理与维护 [1.1]show slave status\G :在从库查看从库线程状态 [1.2]flush tables with read lock;  :主从不 ...

  2. Java基础(五)

    方法概述 方法的定义格式 什么是方法?方法就好像是一个工厂. 如奶牛场 原料:奶牛,饲料 产出物:牛奶,各种奶制品 程序当中的方法 参数(原料):进入方法的数据 返回值(产出物):从方法中出来的数据 ...

  3. 小记----------lombok插件idea的安装&常见注解解释及小案例

    Lombok安装插件 软件:idea 2018.3.6版本 1.打开settings

  4. orzdba工具配置

    ./orzdba -lazy -rt -S /u01/svr/working/my3306/run/mysql.sock mysql -s --skip-column-names -h127.0.0. ...

  5. 与高精死杠的几天——记两道简单的高精dp

    (同样也是noip往年的题 1​.矩阵取数游戏 题目链接[Luogu P1005 矩阵取数游戏] \(\mathcal{SOLUTION}:\) 通过对题目条件的分析,我们可以发现,每一行取数对答案的 ...

  6. CVE-2017-17558漏洞学习

    简介 这是USB core中的一个拒绝服务漏洞.带有精心设计的描述符的恶意USB设备可以通过在配置描述符中设置过高的bNumInterfaces值来导致内核访问未分配的内存.虽然在解析期间调整了该值, ...

  7. Codeforces 1194C. From S To T

    传送门 首先贪心, $S$ 能和 $T$ 匹配就要尽量匹配,剩下的才让 $P$ 来补 在 $S$ 全部匹配上的情况下,看看 $P$ 是否有足够的字符即可 #include<iostream> ...

  8. spring boot本地开发与docker容器化部署的差异

    spring boot本地开发与docker容器化部署的差异: 1. 文件路径及文件名区别大小写: 本地开发环境为windows操作系统,是忽略大小写的,但容器中区分大小写 2. docker中的容器 ...

  9. [转载]布隆过滤器(Bloom Filter)

    [转载]布隆过滤器(Bloom Filter) 这部分学习资料来源:https://www.youtube.com/watch?v=v7AzUcZ4XA4 Filter判断不在,那就是肯定不在:Fil ...

  10. 基于Zabbix 3.2.6版本的low-level-discover(lld)

    个人使用理解:      1.使用一个返回值是JSON的KEY,在Templates或者Hosts中创建一个Discovery规则.该key的返回值类似于: 索引key -- value 类型     ...