绘制填充区域

Windows 中7个用来画带边缘的填充图形的函数如下表所示: 

函数

图形

Rectangle

直角矩形

Ellipse

椭圆

RoundRect

圆角矩形

Chord

椭圆周上的弧,两端以弦连接

Pie

椭圆上的饼图

Polygon

多边形

PolyPolygon

多个多边形

Windows 用设备描述表中选择的当前画笔来画图形的边界框,边界框还使用当前背景方式、背景色彩和绘图方式,这跟 Windows 画线时一样。
图形以当前设备描述表中选择的刷子来填充。默认情况下,使用现有对象,这意味着图形内部将画为白色。

Windows 定义了6种现有刷子:
WHITE_BRUSH,LTGRAY_BRUSH,GRAY_BRUSH,DKGRAY_BRUSH,BLACK_BRUSH 和 NULL_BRUSH(也叫 HELLOW_BRUSH).
可以将任何一种现有画刷选入设备描述表中,就和选择画笔一样。

Windows 将 HBRUSH 定义为刷子的句柄。

刷子的获取和选入:
// 定义一个刷子句柄变量
HBRUSH hBrush;

// 获取 GRAY_BRUSH 的句柄
hBrush = GetStockObject(GRAY_BRUSH);

// 选进设备描述表
SelectObject(hdc,hBrush);

// 现在如果要画上表中的任一个图形,则其内部为灰色。

/* ------------------------------------------*/

// 如果想画一个没有边界框的图形,可以将 NULL_PEN 选进设备描述表:
SelectObject(hdc,GetStockObject(NULL_PEN));

// 如果想画出图形的边界框,但不填充内部,则将 NULL_BRUSH 选进设备描述表:
SelectObject(hdc,GetStockObject(NULL_BRUSH));

对于 Polygon 和 PolyPolygon 函数,Windows 使用定义在设备描述表中的当前画刷来填充这个带边界的区域。至于填充内部的方式,则取决于多边形填充方式,可以用SetPolyFillMode 函数来设置:
SetPolyFillMode(hdc,iMode);
默认情况下,多边形填充方式是 ALTERNATE,但是可以将它设置为 WINDING。

用画刷填充内部:
Rectangle,RoundRect,Ellipse,Chord,Pie,Polygon 和 PolyPolygon 图形的内部是用选进设备描述表的当前画刷(也成为“模式”)来填充的。
画刷是一个 8 * 8 的位图,它水平和垂直地重复使用来填充内部区域。

逻辑画刷:
与逻辑画笔一样,逻辑画刷也是 GDI 对象。创建的所有画刷都必须被删除,但是当它还在设备描述表中时不能将其删除。

Windows 有5个函数可以用来创建逻辑画刷,然后就可使用 SelectObject 将画刷选进设备描述表。
创建逻辑画刷的第一个函数
hBrush = CreateSolidBrush(crColor);
函数中的 Solid 并不是指画刷为纯色。在将画刷选入设备描述表中时,Windows 创建一个抖动色的位图,并为画刷使用该位图。

可以使用由水平、垂直或者倾斜的线组成的“影线标记(hatch marks)”来创建画刷,第二个函数为创建影线画刷的函数:
hBrush = CreateHatchBrush(iHatchStyle,crColor);
iHatchStyle 参数描述影线标记的外观,有6种可用的影线标记风格:HS_HORIZONTAL,HS_BDIAGONAL,HS_VERTICAL,HS_CROSS,HS_FDIAGONAL,HS_DIAGCROSS;
crColor 参数是影线的色彩,在将画刷选进设备描述表时,Windows 将这种色彩转换为与之最相近的纯色。影线之间的区域根据设备描述表中定义的背景方式和背景色来着色。如果背景方式为 OPAQUE,则用背景色(它也被转换为纯色)来填充线之间的空间。在这种情况下,影线和填充线都不能是抖动色。如果背景方式为 TRANSPARENT,则 Windows 只画出影线,不填充它们之间的区域。

第三、第四个函数
CreatePatternBrush 和 CreateDIBPatternBrushPt
创建基于位图的画刷。

第5个函数:
hBrush = CreateBrushIndirect(&logbrush);
变量 logbrush 是一个类型为 LOGBRUSH(“逻辑画刷”)的结构。

和画笔一样,用 SelectObject 将画刷选进设备描述表,用 DeleteObject 删除画刷,用GetObject 来获取逻辑画刷的信息:
// 将画刷选进设备描述表
SelectObject(hdc,hBrush);

// 删除所创建的画刷
DeleteObject(hBrush);

// 获取画刷的信息
GetObject(hBrush,sizeof(LOGBRUSH),(LPVOID)&logbrush);
注意:不要删除当前选进设备描述表的画刷。

posted on 2012-01-05 16:57 梦五 阅读(643) 评论(0)  编辑 收藏 引用 所属分类: Windows相关


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


<2024年11月>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

导航

统计

常用链接

留言簿

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜