CBrush

类CBrush封装了Windows图形设备接口(GDI)中的画刷。使用CBrush对象之前要构造它,然后传给需要画刷的CDC成员函数。画刷可以是实线的、阴影线的或图案的。要了解有关画刷的更详细信息,请参阅联机文档“Visual C++程序员指南”中的”图形对象”部分include <afxwin.h>
请参阅  CBitmap, CDC

CBrush类的成员

构造函数Cbrush构造一个CBrush对象

初始化函数
CreateSolidBrush用指定的实线初始化画刷
CreateHatchBrush用指定的阴影线初始化画刷
CreateBrushIndirect用结构LOGBRUSH中指定的风格、颜色和模式初始化画刷CreatePatternBrush用位图指定的模式初始化画刷
CreateDIBPatternBrush用独立于设备的位图(DIB)初始化画刷
CreateSysColorBrush创建一个使用系统缺省颜色的画刷

操作
FromHandle给出一个WindowsHBRUSH对象句柄时,返回一个指向CBrush对象的指针

属性
GetLogBrush取得一个LOGBRUSH结构
operator HBRUSH返回CBrush对象上的Windows句柄

成员函数
CBrush:: CBrush
CBrush( );
CBrush( COLORREF crColor );
throw( CResouceException );
CBrush( int nIndex, COLORREF crColor );
throw( CResouceException );
CBrush( CBitmap* pBitmap );
throw( CResouceExecption );
参数
crColor指定画刷的前景色(RGB方式)。如果画刷是阴影线型的,则指定阴影线的颜色。
nIndex指定画刷阴影线采用的风格,取值如下:
 HS_BDIAGONAL45度的向下影线(从左到右)
 HS_CROSS水平和垂直方向以网格线作出阴影
 HS_DIAGCROSS 45度的网格线阴影
 HS_FDIAGONAL 45度的向上阴影线(从左到右)
 HS_HORIZONTAL  水平的阴影线
 HS_VERTICAL  垂直的阴影线
pBitmap指向CBitmap对象的指针,该对象指定了画刷要绘制的位图。
说明
类CBrush一共有四个覆盖的构造函数。不带参数的那个构造函数构造一个未初始化的CBrush对象,在使用该对象之前需要另外初始化。如果使用了不带参数的那个构造函数,则必须用CreateSolidBrush、CreateHatchBrush、CreateBrushIndirect、CreatePatternBrush或CreateDIBPatternBrush来初始化返回的CBrush对象。如果使用了带参数的构造函数,则不再需要初始化CBrush对象。带参数的构造函数在出错时会产生一个异常,而不带参数的构造函数总是成功返回。只带有一个参数COLORREF的构造函数用指定的颜色构造一个实线型的画刷。颜色是一个RGB值,可以用WINDOWS.H中的宏RGB构造出来。带两个参数的构造函数构造一个阴影线型的画刷,参数nIndex指定了阴影线模式的指数(index)。参数crColor指定了画刷的颜色。带有一个CBitmap型参数的构造函数构造一个模式化的画刷。参数指定一个位图。该位图应该是已经用CBitmap::CreateBitmap、CBitmap::CreateBitmapIndirect、CBitmap::LoadBitmap或CBitmap::CreateCompatiableBitmap建立或加载的位图。填充模式下的位图的最小尺寸为8像素×8像素。
请参阅  CBrush::CreateSolidBrush,
CBrush::CreateHatchBrush,
CBrush::CreateBrushIndirect,
CBrush::CreatPatternBrush,
CBrush::CreateDIBPatternBrush,
CGdiObject::CreateStockObject

CBrush::CreateBrushIndirect
BOOL CreateBrushIndirect( const LOGBRUSH* lpLogBrush ):
返回值
调用成功时返回非零值,否则为0。
参数
lpLogBrush指向LOGBRUSH结构的指针,结构中记录了画刷的相关信息。
说明
本函数用结构LOGBRUSH中指定的风格、颜色和模式初始化画刷。以后,该画刷可以被选为任何设备上下文的当前画刷。采用黑白位图(1位面、每像素1位)创建的画刷使用当前的文本颜色和背景色。位值置为0的像素点将用当前的文本颜色绘制。位值置为1的像素点将用当前的背景色绘制。
请参阅  
CBrush::CreateDIBPatternBrush,
CBrush::CreatePatternBrush,
CBrush::CreateSolidBrush,
CBrush::CreateHatchBrush,
CGdiObject::DeleteObject,
::CreateBrushIndirect
CGdiObject::CreateStockObject,

CBrush::CreateDIBPatternBrush
BOOL CreateDIBPatternBrush( HGLOBAL hPackedDIB, UINT nUsage );
BOOL CreateDIBPatternBrush( const void* lpPackedDIB, UINT nUsage );
返回值
调用成功时返回非零值,否则为0。
参数
hPackedDIB指定一个全局内存对象,其中包含了一个压缩的独立于设备的位图(DIB)
nUsage指明BITMAPINFO数据结构(压缩的DIB中的一部分)的bmiColors[]成员是否包含明确的RGB值或指向当前逻辑调色板的索引值。参数必须取以下值之一:
 DIB_PAL_COLORS颜色表由一个16位的索引数组组成。
 DIB_RGB_COLORS颜色表中包含字母式的RGB颜色值。
下面这个值只在第二个函数中有效:
DIB_PAL_INDICES未提供颜色表。位图中包含了指向画刷选中的设备上下文的逻辑调色板的索引。
lpPackedDIB指向一个包括了BITMAPINFO结构的压缩的DIB。BITMAPINFO结构后紧跟着的是定义位图像素的字节数组。
说明
本函数用DIB指定的模式初始化画刷。画刷随后就可以被任何支持光栅操作的设备上下文选中。
CreateDIBPatternBrush函数的两个版本在处理DIB时有些不同:
 在前一个函数中,取得DIB的句柄需要调用Windows函数::GlobalAlloc来分配内存,然后用DIB填充这块内存。
 在后一个函数中,不再需要调用函数::GlobalAlloc为压缩的DIB分配内存。
一个压缩的DIB由一个BITMAPINFO结构和紧跟着的一个字节数组(该数组定义了位图的像素)构成。用作填充模式的位图应该是8像素×8像素的。如果位图太大,Windows将用该位图的左上角的8行8列的像素来创建填充模式。当应用选择一个两种颜色的DIB模式到一个黑白的设备上下文中时,Windows将忽略DIB中指定的颜色,而用该设备上下文中当前文本的颜色和背景色显示模式画刷。DIB中对应于第一种颜色的像素(在DIB颜色表偏移为0处)将采用文本的颜色显示。DIB中对应于第二种颜色的像素(在DIB颜色表偏移为1处)将采用背景色显示。要了解有关使用以下的Windows函数的更详细的信息,请参阅联机文档“Win32 SDK程序员参考”。
 ::CreateDIBPatternBrush(本函数是为了兼容Windows3.0之前的应用而提供的,对于  Win32应用,请用函数::CreateDIBPatternBrushPt)
 ::CreateDIBPatternBrushPt(本函数只用于基于Win32的应用)
 ::GlobalAlloc
请参阅  
CBrush::CreatePatternBrush,
CBrush::CreateBrushIndirect,
CBrush::CreateSolidBrush,
CBrush::CreateHatchBrush,
CGdiObject::CreateStockObject,
CDC::SelectObject,
GdiObject::DeleteObject,
CDC::GetBrushOrg,
CDC::SetBrushOrg

CBrush::CreateHatchBrush
BOOL CreateHatchBrush( int nIndex, COLORREF crColor );
返回值
调用成功时返回非零值,否则为0。
参数
nIndex指定画刷的阴影线风格。可取的值如下:
 HS_BDIAGONAL 45度的向下影线(从左到右)
 HS_CROSS  水平和垂直方向以网格线作出阴影
 HS_DIAGCROSS45度的网格线阴影
 HS_FDIAGONAL45度的向上阴影线(从左到右)
 HS_HORIZONTAL  水平的阴影线l HS_VERTICAL  垂直的阴影线
crColor指定画刷的前景色(RGB形式的值),就是阴影的颜色。要了解更详细的信息,请参阅联机文档“Win32 SDK”中关于COLORREF的描述.
说明
本函数用指定的阴影模式和颜色初始化画刷。随后该画刷就可以被选为任何设备上下文的当前画刷了。
请参阅  
CBrush::CreateBrushIndirect,
CBrush::CreateDIBPatternBrush,
CBrush::CreatePatternBrush,
CBrush::CreateSolidBrush,
CGdiObject::CreateStockObject,
::CreateHatchBrush

CBrush::CreatePatternBrush
BOOL CreatePatternBrush( CBitmap* pBitmap );
返回值
调用成功时返回非零值,否则为0。
参数
pBitmap指定一个位图。说明本函数用位图指定的模式初始化画刷。此画刷随后就可用于任何支持光栅操作的设备上下文。由bBitmap指定的位图一般用以下的函数初始化:CBitmap:: CreateBitmap、CBitmap::CreateBitmapIndirect、CBitmap::LoadBitmap或Cbitmap:: CreateCompatibleBitmap。
用作填充模式的位图应该是8像素×8像素的。如果位图太大,Windows将用该位图的左上角的8行8列的像素来创建填充模式。删除模式画刷时不会影响相关的位图。这意味着可以用一个位图来创建任意个模式画刷。采用黑白位图(1位面、每像素1位)创建的画刷使用当前的文本颜色和背景色。位值置为0的像素点将用当前的文本颜色绘制,位值置为1的像素点将用当前的背景色绘制。要了解有关使用Windows函数::CreatePatternBrush的更详细信息,请参阅联机文档“Win32 SDK 程序员参考”。
请参阅  CBitmap,
CBrush::CreateBrushIndirect,
CBrush::CreateDIBPatternBrush,
CBrush::CreateHatchBrush,
CBrush::CreateSolidBrush,
CGdiObject::CreateStockObject

CBrush::CreateSolidBrush
BOOL CreateSolidBrush( COLORREF crColor );
返回值
调用成功时返回非零值,否则为0。
参数
crColor指定画刷颜色的一个COLORREF结构。该颜色指定了一个RGB颜色值,可以用头文件WINDOWS.H中的宏RGB生成。
说明
本函数用指定的颜色初始化画刷。随后该画刷就可用于任何设备上下文的当前画刷。当应用使用完CreateSolidBrush创建的画刷之后,应该从设备上下文中移出该画刷。
请参阅  
CBrush::CreateBrushIndirect,
CBrush::CreateDIBPatternBrush,
CBrush::CreateHatchBrush,
CBrush::CreatePatternBrush,
::CreateSolidBrush,
CGdiObject::DeleteObject

CBrush::CreateSysColorBrush
BOOL CreateSysColorBrush( int nIndex );
返回值
调用成功时返回非零值,否则为0。
参数
nIndex指定阴影线画刷的风格。可能的取值如下:
 HS_BDIAGONAL45度的向下影线(从左到右)
 HS_CROSS水平和垂直方向以网格线作出阴影
 HS_DIAGCROSS45度的网格线阴影
 HS_FDIAGONAL45度的向上阴影线(从左到右)l HS_HORIZONTAL水平的阴影线
 HS_VERTICAL垂直的阴影线
说明
本函数初始化画刷的颜色。随后该画刷就可用于任何设备上下文的当前画刷。当应用使用完CreateSysColorBrush创建的画刷之后,应该从设备上下文中移出该画刷。
请参阅  
CBrush::CreateBrushIndirect,
CBrush::CreateDIBPatternBrush,
CBrush::CreateHatchBrush,
CBrush::CreatePatternBrush,
CBrush::CreateSolidBrush,
::GetSysColorBrush,
::CreateSolidBrush,
CGdiObject::DeleteObject

CBrush::FromHandle
static CBrush* PASCAL FromHandle( HBRUSH hBrush );
返回值
调用成功时返回一个指向CBrush对象的指针,否则返回NULL。
参数
hBrush指向一个Windows GDI画刷的句柄。
说明
本函数返回一个指向CBrush对象的指针,所需参数为一个指向一个Windows GDI画刷的句柄。如果该CBrush对象没有应用到句柄上,则创建一个临时的CBrush对象并应用它。该临时CBrush对象保持有效,直到应用在它的事件循环中出现空闲时间,此时Windows会删除所有的临时图形对象。换句话说,临时对象仅在一个Windows消息的处理过程中有效。要了解有关使用图形对象的更详细信息,请参阅联机文档“Win32 SDK程序员参考”中的“图形对象”部分。

CBrush::GetLogBrush
int GetLogBrush( LOGBRUSH*  pLogBrush );
返回值
调用成功且参数pLogBrush有效时,返回存到缓冲区中的字节数。调用成功但参数pLogBrush为NULL时,返回为了保存数据到缓冲区所需的字节数。否则,返回0。
参数
pLogBrush指向一个LOGBRUSH结构的指针,结构中包含了画刷的有关信息。
说明
本函数用于检索LOGBRUSH结构中的信息。该结构定义了画刷的风格、颜色和模式。例如,调用本函数来取得某个位图的颜色和模式。
示例
LOGBRUSH logbrush;brush
Existing.GetLogBrush( &logbrush );
CBrush brushOther ( logbrush,lbColor );
请参阅 LOGBRUSH, ::GetObject

CBrush::operator HBRUSH
operator HBRUSH( ) const;
返回值
调用成功时返回一个指向Windows GDI对象的句柄,该句柄表示一个CBrush对象。否则返回NULL。
说明
本操作符用于取得某个CBrush对象上的Windows GDI对象句柄。这是一个校验性操作符,可直接参考HBRUSH对象。要了解有关使用图形对象的更详细信息,请参阅联机文档“Win32 SDK程序员参考”中的“图形对象”部分。

 

void CBrushDemoView::OnDraw(CDC* pDC)
{
 CBrushDemoDoc* pDoc = GetDocument();
 ASSERT_VALID(pDoc);
 // TODO: add draw code for native data here
    CRect rect;
 CBrush *pOldBrush;
 rect.SetRect(100,20,180,100);//设置矩形输出位置
 CBrush brush1(RGB(255,0,0));//创建红色画刷
 //将红色画刷选入设备环境,并将系统原有画刷保存在pOldBrush中
 pOldBrush=pDC->SelectObject(&brush1);
 pDC->TextOut(15,20,"红色画刷");//输出说明性文字
 pDC->Rectangle(rect);//画矩形

 rect.SetRect(100,120,180,200);//设置矩形输出位置
 CBrush brush2(RGB(0,255,0));//创建绿色画刷
 pDC->SelectObject(&brush2);
 pDC->TextOut(15,120,"绿色画刷");
 pDC->Rectangle(rect);


 rect.SetRect(100,220,180,300);//设置矩形输出位置
 CBrush brush3(RGB(0,0,255));//创建绿色画刷
 pDC->SelectObject(&brush3);
 pDC->TextOut(15,220,"兰色画刷");
 pDC->Rectangle(rect);

 


 rect.SetRect(300,20,380,100);//设置矩形输出位置
 CBrush brush4(HS_BDIAGONAL,RGB(255,0,0));//创建红色画刷
 pDC->SelectObject(&brush4);
 pDC->Rectangle(rect);//画矩形

 rect.SetRect(300,120,380,200);//设置矩形输出位置
 CBrush brush5(HS_CROSS,RGB(0,255,0));//创建绿色画刷
 pDC->SelectObject(&brush5);
 pDC->Rectangle(rect);


 rect.SetRect(300,220,380,300);//设置矩形输出位置
 CBrush brush6(HS_DIAGCROSS,RGB(0,0,255));//创建绿色画刷
 pDC->SelectObject(&brush6);
 pDC->Rectangle(rect);
    //.....
 //恢复系统原有的画刷
 pDC->SelectObject(pOldBrush);
}

 

 

创建空心矩形

CBrush *pOldBrush;

        CBrush brush(RGB(255,0,0));

        pOldBrush=dc.SelectObject(&brush);

        dc.SelectStockObject(NULL_BRUSH);               //创建空心画刷

        CRect rectTemp;

        rectTemp.SetRect(CPoint(10,30),CPoint(90,180));

        dc.Rectangle(&rectTemp);

        dc.SelectObject(pOldBrush);

 

你可能感兴趣的:(windows,文档,pascal,图形,colors,网格)