画刷其实是一个像素大小为8*8的位图,用多个相同的位图对封闭图形的内部进行填充。
MFC的CBrush类封装了画刷对象,创建画刷时,首先定义一个画刷对象,然后调用CreateSolidBrush、CreateHatchBrush或CreatePatternBrush函数。可以采用下面三种方式创建画刷。
1. 创建单色画刷
BOOL CreateSolidBrush( COLORREF crColor //画刷颜色 );2. 创建阴影画刷
BOOL CreateHatchBrush( int nIndex, //阴影画刷类型 COLORREF crColor //画刷颜色 );参数nIndex指定画刷的样式。可以设置的样式如下所示:
参数(Parameter)描述(Description)HS_BDIAGONAL表示45度向上,从左至右的阴影(/)HS_CROSS水平和垂直交叉阴影(+++++)HS_DIAGCROSS45度交叉阴影(XXXXX)HS_FDIAGONAL45度向下,自左至右阴影(\\\)HS_HORIZONTAL水平阴影(-----)HS_VERTICAL垂直阴影(crColor指定用于阴影的刷子的前景色3. 创建按图画刷
BOOL CreatePatternBrush( CBitmap* pBitmap //画刷位图,只使用左上角的8*8大小 );功能:对话框上有一个按钮控件和一个图片控件,点击按钮弹出颜色对话框,然后在颜色对话框中选择颜色并点击“确定”后,图片控件中将显示选择的颜色。
其实此实例的功能,还可以通过重载对话框WM_CTLCOLOR消息的响应函数等方法来实现,但为讲解画刷的CBrush的使用,采用了下面代码中的方法。
代码中已经加了详细的注释,不过我觉得有必要再简单介绍下CClientDC类。CClientDC类是CDC类的派生类,它生成的设备上下文对应于窗口的客户区,另一个类CWindowDC也是CDC类的派生类,它对应的则包括客户区和非客户区,也就是说,CClientDC只能在客户区绘图,而CWindowDC可在客户区和非客户区绘图。
讲到这里,有人会问,到底什么是客户区,什么是非客户区?非客户区包括窗口中的标题栏、菜单栏、状态栏、滚动条、边框等区域,客户区就是除去非客户区之外的区域。
编译运行程序,在结果对话框中,点击“选择颜色”按钮弹出颜色对话框,并选择颜色后,效果如下图:
本节教程除讲了画刷CBrush的使用外,还让大家简单温习了颜色对话框的用法。 这里提醒大家,如果有什么函数或类的用法不是很清楚,均可以查阅MSDN。
不管学习什么,这里的建议都是先看一下理论知识,就算是过一遍,至少也比直接实操的得心应手一些。
关于图形图像相关的内容,这三章搞定了之后,想必基础的GDI编程是没有太大问题的。看了这些理论知识,有了这些基础,再去看一些实例,就不再是问题了。
趁着这次机会,简单了解了一下图形学的皮毛。博主对这方面还是很有兴趣的,如果有什么问题,可以一起探讨下。
版权声明:转载请注明出处,谢谢!