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. 云数据库 Redis 版

    首先观看视频简介 云数据库 Redis 版是一项易于部署和管理的按需数据库服务,与 Redis 协议兼容.云数据库 Redis 版通过从内存缓存中检索数据而提供高速数据读写功能,并通过同时使用内存和硬 ...

  2. Hive 教程(十)-UDF

    hive 虽然自带了很多函数,但是毕竟有限,无法满足所有业务场景,用户可以自定义函数来实现特定功能 UDF user define function,用户自定义函数 可以分为 3 类 UDF:一进一出 ...

  3. 福建工程学院第十四届ACM校赛J题题解

    第六集,想不到你这个浓眉大眼的都叛变革命了 题意: 给你两个只包含01的字符串S和T,问你在允许一次错误的情况下,T是否能成为S的子串 思路: 这个问题的解法挺多,我是用fft匹配的,也比较简单,针对 ...

  4. PHP 下载mysql数据到PHPExcel表格

    第一步:先到官网(https://github.com/PHPOffice/PHPExcel)下载PHPExcel 第二步:放到第三方库 第三步: /** * 封装:信息导出 * @param $da ...

  5. Java内存泄漏真实案例

    内存泄漏:当不再需要一个对象时,垃圾收集器会回收它:如果不需要的对象一直在产生而不被收回,就称作“内存泄漏”. 以下为本人在工作中遇到的内存泄漏的案例: 1.对于大量的请求,使用了Executors. ...

  6. 韦东山嵌入式Linux学习笔记02--如何给开发板烧录程序

    购买韦东山嵌入式开发板jz2440 v3会标配两根usb线和一根网线,OpenJtag需要单独购买, 我暂时还没买到该工具. 下面介绍usb烧录以及通过网线烧录程序. 1.usb烧录程序: 借助DNW ...

  7. maven学习之路二(2)

    上次我介绍到mybaties generator 这款mybaties的插件.这次我简单介绍下这款插件: <plugin> <groupId>org.mybatis.gener ...

  8. redis弱密码漏洞利用

    背景: redis无认证,或者弱密码,可以成功连接到redis服务器 反弹shell拿到的权限取决于redis的启动账号 操作: 1. Centos7安装redis客户端 #yum install r ...

  9. 009(1)-saltstack之salt-ssh的使用及配置管理LAMP状态的实现

    1 salt-ssh的使用 1. 安装salt-ssh[root@slave1 .ssh]# yum install -y salt-ssh 2. 配置salt-ssh # Sample salt-s ...

  10. Maven 技巧知多少

    Maven是一种帮助我们快速构建项目的小工具,它可以解决我们在项目过程中手动导包造成的版本不一致的问题,以及找包困难等问题,同时通过Maven创建的项目都有固定的目录格式,使得约定优于配置,我们通过固 ...