创建画刷的几种形式

时间:2021-08-24 02:39:42





HBRUSH hbr;

第一种: hbr= CreateSolidBrush(RGB(255,0,0));                       //创建单色的画刷

第二种: hbr= (HBRUSH)GetStockObject(BLACK_BRUSH);   //只能取特定颜色的画刷,如BLACK_BRUSH,GRAY_BRUSH刷

第三种: hbr= CreatePatternBrush(HBITMAP hbmp);               //得到位图画刷

第四种: hbr = CreateHatchBrush(int fnStyle,                             //创建一种带阴影的画刷
                              COLORREF clrref
                               )

第五种: hbr= CreateBrushIndirect(LOGBRUSH);                    //通过LOGBRUSH结构体来取画刷
  
typedef struct tagLOGBRUSH { 
    UINT     lbStyle; //画刷类型
    COLORREF lbColor; //颜色
    LONG     lbHatch; //阴影
} LOGBRUSH, *PLOGBRUSH;


第六种: hbr= HBRUSH CreateDIBPatternBrush(                   //通过与设备无关位图创建一个画刷
     HGLOBAL hglbDIBPacked, // handle to DIB
     UINT fuColorSpec        // color table data
   );


Windows还有五个函数,可以让您建立逻辑画刷,然后就可使用SelectObject将画刷选进设备内容。与逻辑画笔一样,逻辑画刷也是GDI对象。您建立的所有画刷都必须被删除,但是当它还在设备内容中时不能将其删除。

下面是建立逻辑画刷的第一个函数:

hBrush = CreateSolidBrush (crColor) ;

函数中的Solid并不是指画刷为纯色。在将画刷选入设备内容中时,Windows建立一个混色色的位图,并为画刷使用该位图。

您还可以使用由水平、垂直或者倾斜的线组成的「影线标记(hatch marks)」来建立画刷,这种风格的画刷对着色条形图的内部和在绘图机上进行绘图最有用。建立影线画刷的函数为:

hBrush = CreateHatchBrush (iHatchStyle, crColor) ;

iHatchStyle参数描述影线标记的外观。图5-18显示了六种可用的影线标记风格。


 

图5-18 六种影线画刷风格

CreateHatchBrush中的crColor参数是影线的色彩。在将画刷选进设备内容时,Windows将这种色彩转换为与之最相近的纯色。影线之间的区域根据设备内容中定义的背景方式和背景色来着色。如果背景方式为OPAQUE,则用背景色(它也被转换为纯色)来填入线之间的空间。在这种情况下,影线和填入色都不能是混色而成的颜色。如果背景方式为TRANSPARENT,则Windows只画出影线,不填入它们之间的区域。

您也可以使用CreatePatternBrush和CreateDIBPatternBrushPt建立自己的位图画刷。

建立逻辑画刷的第五个函数包含其它四个函数:

hBrush = CreateBrushIndirect (&logbrush) ;

变量logbrush是一个型态为LOGBRUSH(「逻辑画刷」)的结构,该结构的三个字段如表5-4所示,lbStyle字段的值确定了Windows如何解释其它两个字段的值:

表5-4

lbStyle (UINT)

lbColor (COLORREF)

lbHatch (LONG)

BS_SOLID

画刷的色彩

忽略

BS_HOLLOW

忽略

忽略

BS_HATCHED

影线的色彩

影线画刷风格

BS_PATTERN

忽略

位图的句柄

BS_DIBPATTERNPT

忽略

指向DIB的指标

前面我们用SelectObject将逻辑画笔选进设备内容,用DeleteObject删除画笔,用GetObject来取得逻辑画笔的信息。对于画刷,同样能使用这三个函数。一旦您取得到了画刷句柄,就可以使用SelectObject将该画刷选进设备内容:

SelectObject (hdc, hBrush) ;

然后,您可以使用DeleteObject函数删除所建立的画刷:

DeleteObject (hBrush) ;

但是,不要删除目前选进设备内容的画刷。

如果您需要取得画刷的信息,可以呼叫GetObject:

GetObject (hBrush, sizeof (LOGBRUSH), (LPVOID) &logbrush) ;

其中,logbrush是一个型态为LOGBRUSH的结构。