设为首页 加入收藏

TOP

14.2.2 CDC类(5)
2013-10-07 16:11:11 来源: 作者: 【 】 浏览:65
Tags:14.2.2 CDC

14.2.2  CDC类(5)

创建画笔

CBrush类的对象封装了Windows画笔。可以把画笔定义成纯色、阴影线或者有图案的画笔。画笔实际上是一个8×8的像素块,它在要填充的区域上重复应用。

要定义纯色的画笔,可以在创建画笔对象时指定颜色。例如,

  1. CBrush aBrush(RGB(255,0,0));                   // Define a red brush 

这个语句定义了红色画笔。传递到这个构造函数的值必须是COLORREF类型,这是由RGB()宏返回的类型,所以在指定颜色时,这是一种好方法。

可以使用另一种构造函数定义阴影线画笔。这需要指定两个参数,和以前一样,第一个参数定义阴影线的类型,第二个参数指定颜色。阴影线参数可以是下列符号常量之一,见表14-3。

表  14-3

阴影线类型
   
HS_HORIZONTAL
水平阴影线
HS_VERTICAL
垂直阴影线

(续表)

阴影线类型
   
HS_BDIAGONAL
从左到右的45°下行阴影线
HS_FDIAGONAL
从左到右的45°上行阴影线
HS_CROSS
水平和垂直交叉阴影线
HS_DIAGCROSS
45°交叉阴影线

因此,要获得红色的45°交叉阴影线画笔,可以利用下列语句定义CBrush对象:

  1. CBrush aBrush(HS_DIAGCROSS, RGB(255,0,0)); 

在初始化CBrush对象时,也可以使用类似于初始化CPen对象时的方式,对纯色画笔使用CBrush类的CreateSolidBrush()成员函数,对阴影线画笔使用这个类的CreateHatchBrush()成员函数。它们需要的参数和对应的构造函数相同。例如,可以利用下列语句创建和前面一样的阴影线画笔:

  1. CBrush aBrush;                                                                                      // Define a brush object  
  2. aBrush.CreateHatchBrush(HS_DIAGCROSS, RGB(255,0,0));  

使用画笔

要使用画笔,应当按照与钢笔类似的方式调用CDC类的SelectObject()成员函数,把画笔选入设备上下文中。为了把画笔对象选入设备上下文中,将重载这个成员函数。在选择以前定义的画笔时,只需要编写下列语句:

  1. CBrush* pOldBrush = pDC->SelectObject(&aBrush);             // Select the brush into the DC 

SelectObject()函数返回指向旧画笔的指针,如果操作失败,则返回NULL。函数执行完成之后,使用返回的此指针可以将旧画笔存储在设备上下文中。

有7种标准画笔可用。每种标准画笔都由预定义的符号常量标识。它们分别是:

GRAY_BRUSH
LTGRAY_BRUSH
DKGRAY_BRUSH
BLACK_BRUSH
WHITE_BRUSH
 
HOLLOW_BRUSH
NULL_BRUSH
 

这些画笔名称的含义不言自明。要使用画笔,需要调用CDC类的SelectStockObject()成员函数,把想要使用的画笔的符号名称作为参数进行传递。要使用不填充闭合形状内部的空画笔,可以编写下列语句:

  1. CBrush* pOldBrush = dynamic_cast<CBrush*>(pDC->SelectStockObject(NULL_BRUSH)); 

和以前一样,pDC是指向CDC对象的指针。在SelectStockObject()函数中还可以使用标准钢笔之一。标准钢笔的符号是BLACK_PEN、NULL_PEN (不进行任何绘制)和WHITE_PEN。因为这个函数处理各种各样的对象-- 如本章中介绍过的钢笔和画笔,不过它也处理字体-- 所以返回的指针的类型是CGdiObject*。CGdiObject类是所有GDI对象的基类,因而指向这个类的指针可以用于存储任何GDI对象的地址。可以将SelectObject()或SelectStockObject()返回的指针存储为CGdiObject*类型,并在想要还原时传递给SelectObject()。但是,最好将返回的指针值强制转换成适当的类型,以便跟踪在设备上下文中还原的对象类型。

对于使用备用画笔,然后在完成绘图后还原以前的画笔这种情况,典型的编码方式是:

  1. CBrush* pOldBrush = (CBrush*)pDC->SelectStockObject(NULL_BRUSH);  
  2. // draw something...  
  3. pDC->SelectObject(pOldBrush);                                                   // Restore the old brush  

在本章后面的示例中将使用这样的代码。
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇14.2.2 CDC类(4) 下一篇8.11.5 搜索字符串(3)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·数据库:推荐几款 Re (2025-12-25 12:17:11)
·如何最简单、通俗地 (2025-12-25 12:17:09)
·什么是Redis?为什么 (2025-12-25 12:17:06)
·对于一个想入坑Linux (2025-12-25 11:49:07)
·Linux 怎么读? (2025-12-25 11:49:04)