CPen,CBrush,

本文介绍了在Windows GDI中如何创建和使用绘图对象,包括画笔(CBrush)、画笔(CPen)和字体(CFont)等类的构造函数及成员函数。详细解释了如何设置这些对象的样式、颜色和宽度,并提供了多种初始化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

virtual BOOL TextOut( int x, int y, LPCTSTR lpszString, int nCount );

BOOL TextOut( int x, int y, const CString& str );

virtual int DrawText( LPCTSTR lpszString, int nCount, LPRECT lpRect, UINT nFormat );

int DrawText( const CString& str, LPRECT lpRect, UINT nFormat );

CPen

  1CPen类构造函数该类共重载了3个构造函数;

  CPen( );

  CPen(int nPenStyle, int nWidth, COLORREF crColor);

  throw(CResourceException);

  CPen(int nPenStyle, int mWidth, const LOGVRUSH* pLogBrush, int nStyleCount=0, const DWORD* lpStyle=NULL);

  throw(CResourceException);

  参数nPenStyle的值

  参数值注释

  PS_SOLID 创建一个实线画笔

  PS_DASH 创建一个虚线画笔,该值只有当画笔宽度等于1个设备单位或更小时才有效

  PS_DOT 创建一个点线画笔,该值只有当画笔宽度等于1个设备单位或更小时才有效

  PS_DASHDOT 创建一个点和虚线交替画笔,该值只有当画笔宽度等于1个设备单位或更小时才有效

  PS_DASHDOTDOT 创建一个双点线画笔,该值只有当画笔宽度等于1个设备单位或更小时才有效

  PS_NULL 创建一个空线画笔

  PS_INSIDEFRAME 创建一个内框线画笔,该画笔可以在WindowsGDI输出函数定义的矩形边界所生成的封闭形状的边框内绘制直线

  PS_GEOMETRIC 创建一个几何画笔

  PS_COSMETIC 创建一个装饰画笔

  PS_ALTERNATE 创建一个设置其他像素的画笔

  PS_USERSTYLE 创建一个使用由用户提供的风格矩阵的画笔

  PS_ENDCAP_ROUND 尾帽为圆形的

  PS_ENDCAP_SQUARE 尾帽为方形的

  PS_ENDCAP—FLAT 尾帽为平坦的

  PS_JOIN_BEVEL 成尖角连接

  PS_JOIN_MITET 通过setMiterLimit函数设置的当前极限值范围内斜接;否则,成尖角连接

  PS_JOIN_ROUND 成圆角连接

  参数pLogBrush指向一个LOGBRUSH结构。该结构原型声明如下:

  typedef struct tag LOGBRUSH{ *lb*

  UINT lbStyle;

  COLORREF lbColor;

  LONG lbHatch;

  }LOGBRUSH;

  该结构定义了一个画刷的风格、颜色和阴影线种类。

  画刷的风格值

  参数值说明

  BS_DIBPATTERN 由设备无关的位图定义的图形画刷。如果该参数值为该值,则成员lbHatch包含了一个被压缩的DIB句柄

  BS_DIBPATTERNPT 由设备无关的位图定义的图形画刷。如果该参数值为该值,则成员lbHatch包含了一个被压缩的DIB指针

  BS_HATCHED 阴影线画刷

  BS_HOLLOW 中空画刷

  BS_NULL 与参数值为BS_HOLLOW定义相同的画刷

  BS_PATTERN 由内存位图定义的图形画刷

  BS_SOLID 实画刷

  BS_NULL 与参数值为BS_HOLLOW定义相同的画刷

  BS_PATTERN 由内存位图定义的图形画刷

  BS_SOLID 实画刷

  2CPen类初始化成员函数

  (1)CreatePen( )成员函数其原型声明如下:

  BOOL CreatePen(int nPenStyleint nWidthconst LOGBRUSH* pLogBrushint nStyleCount=0const DWORD*lpStyle=NULL)

  (2)CreatePenIndirect( )成员函数的原型声明如下:

  BOOL CreatePenIndirect(LPLOGPEN lpLogPen)

  LOGPEN结构的具体定义如下:

  typedef struct tagLOGPEN{ // lgpn

  UNIT lopnStyle;

  POINT lopnWidth;

  COLORREF lopnColor;

  }LOGPEN;

  可以使用RGB宏来完成颜色设定:

  COLORREF RGB(cRedcGreencBlue);

  也可以使用COLORREF,其结构为0x00bbggrr

  注:COLORREF实际上就是一个DWORD类型的。所有如果进行颜色传递直接按%d格式就可以,不需要格式的转换。

CBrush

  类CBrush封装了Windows图形设备接口(GDI)中的画刷。使用CBrush对象之前要构造它,然后传给需要画刷的CDC成员函数。画刷可以是实线的、阴影线的或图案的。

  请参阅 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度的向下影线(从左到右)l  

 HS_CROSS水平和垂直方向以网格线作出阴影l  

 HS_DIAGCROSS 45度的网格线阴影l  

 HS_FDIAGONAL 45度的向上阴影线(从左到右)l  

 HS_HORIZONTAL 水平的阴影线l  

 HS_VERTICAL 垂直的阴影线l  

  pBitmap指向CBitmap对象的指针,该对象指定了画刷要绘制的位图。

  说明

  类CBrush一共有四个覆盖的构造函数。不带参数的那个构造函数构造一个未初始化的CBrush对象,在使用该对象之前需要另外初始化。如果使用了不带参数的那个构造函数,则必须用CreateSolidBrushCreateHatchBrushCreateBrushIndirectCreatePatternBrushCreateDIBPatternBrush来初始化返回的CBrush对象。如果使用了带参数的构造函数,则不再需要初始化CBrush对象。带参数的构造函数在出错时会产生一个异常,而不带参数的构造函数总是成功返回。只带有一个参数COLORREF的构造函数用指定的颜色构造一个实线型的画刷。颜色是一个RGB值,可以用WINDOWS.H中的宏RGB构造出来。带两个参数的构造函数构造一个阴影线型的画刷,参数nIndex指定了阴影线模式的指数(index)。参数crColor指定了画刷的颜色。带有一个CBitmap型参数的构造函数构造一个模式化的画刷。参数指定一个位图。该位图应该是已经用CBitmap::CreateBitmapCBitmap::CreateBitmapIndirectCBitmap::LoadBitmapCBitmap::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位的索引数组组成。l  

 DIB_RGB_COLORS颜色表中包含字母式的RGB颜色值。l  

  下面这个值只在第二个函数中有效:

  DIB_PAL_INDICES未提供颜色表。位图中包含了指向画刷选中的设备上下文的逻辑调色板的索引。

  lpPackedDIB指向一个包括了BITMAPINFO结构的压缩的DIBBITMAPINFO结构后紧跟着的是定义位图像素的字节数组。

  说明

  本函数用DIB指定的模式初始化画刷。画刷随后就可以被任何支持光栅操作的设备上下文选中。

  CreateDIBPatternBrush函数的两个版本在处理DIB时有些不同:

l  在前一个函数中,取得DIB的句柄需要调用Windows函数::GlobalAlloc来分配内存,然后用DIB填充这块内存。

 在后一个函数中,不再需要调用函数::GlobalAlloc为压缩的DIB分配内存。l  

  一个压缩的DIB由一个BITMAPINFO结构和紧跟着的一个字节数组(该数组定义了位图的像素)构成。用作填充模式的位图应该是8像素×8像素的。如果位图太大,Windows将用该位图的左上角的88列的像素来创建填充模式。当应用选择一个两种颜色的DIB模式到一个黑白的设备上下文中时,Windows将忽略DIB中指定的颜色,而用该设备上下文中当前文本的颜色和背景色显示模式画刷。DIB中对应于第一种颜色的像素(在DIB颜色表偏移为0处)将采用文本的颜色显示。DIB中对应于第二种颜色的像素(在DIB颜色表偏移为1处)将采用背景色显示。要了解有关使用以下的Windows函数的更详细的信息,请参阅联机文档“Win32 SDK程序员参考

l   ::CreateDIBPatternBrush(本函数是为了兼容Windows3.0之前的应用而提供的,对于 Win32应用,请用函数::CreateDIBPatternBrushPt

 ::CreateDIBPatternBrushPt(本函数只用于基于Win32的应用)l  

 ::GlobalAllocl  

  请参阅

  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度的向下影线(从左到右)l  

 HS_CROSS 水平和垂直方向以网格线作出阴影l  

 HS_DIAGCROSS45度的网格线阴影l  

 HS_FDIAGONAL45度的向上阴影线(从左到右)l  

 HS_HORIZONTAL 水平的阴影线l HS_VERTICAL 垂直的阴影线l  

  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:: CreateBitmapCBitmap::CreateBitmapIndirectCBitmap::LoadBitmapCbitmap:: CreateCompatibleBitmap

  用作填充模式的位图应该是8像素×8像素的。如果位图太大,Windows将用该位图的左上角的88列的像素来创建填充模式。删除模式画刷时不会影响相关的位图。这意味着可以用一个位图来创建任意个模式画刷。采用黑白位图(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度的向下影线(从左到右)l  

 HS_CROSS水平和垂直方向以网格线作出阴影l  

 HS_DIAGCROSS45度的网格线阴影l  

 HS_FDIAGONAL45度的向上阴影线(从左到右)l HS_HORIZONTAL水平的阴影线l  

 HS_VERTICAL垂直的阴影线l  

  说明

  本函数初始化画刷的颜色。随后该画刷就可用于任何设备上下文的当前画刷。当应用使用完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有效时,返回存到缓冲区中的字节数。调用成功但参数pLogBrushNULL时,返回为了保存数据到缓冲区所需的字节数。否则,返回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程序员参考中的图形对象部分。

CFont::CFont

CFont( );

Remarks

Constructs a CFont object. The resulting object must be initialized with CreateFont, CreateFontIndirect, CreatePointFont, or CreatePointFontIndirect before it can be used.

CreateFontIndirect

Initializes a CFont object with the characteristics given in a LOGFONT structure.

CreateFont

Initializes a CFont with the specified characteristics.

CreatePointFont

Initializes a CFont with the specified height, measured in tenths of a point, and typeface.

CreatePointFontIndirect

Same as CreateFontIndirect except that the font height is measured in tenths of a point rather than logical units.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值