一、VC++中的DC环境及GUI有关的各种对象
在Windows中有各种图形用户界面GUI (Graphics User Interface)对象,当我们在进行绘图时就需要利用这些对象。而各种对象都 拥有各种属性,下面首先介绍几种GUI对象和拥有的属性。
(一)、GUI有关的各种对象
在Windows中有各种图形用户界面GUI(Graphics User Interface)对象,当我们在进 行绘图时就需要利用这些对象。而各种对象都拥有各种属性,下面首先介绍几种GUI对象和拥 有的属性。
字体对象CFont
字体对象CFont用于输出文字时选用不同风格和大小的字体。可选择的风格包括:是 否为斜体,是否为粗体,字体名称,是否有下划线等。
刷子CBrush对象
刷子CBrush对象决定填充区域时所采用的颜色或模板。对于一个固定色的刷子来讲它 的属性为颜色,是否采用网格和网格的类型如水平的,垂直的,交叉的等。也可以利用8*8的 位图来创建一个自定义模板的刷子,在使用这种刷子填充时系统会利用位图逐步填充区域。
画笔CPen
画笔CPen对象在画点和画线时有用。它的属性包括颜色,宽度,线的风格,如虚线, 实线,点划线等。
位图CBitmap对象
位图CBitmap对象可以包含一幅图像,可以保存在资源中。
CPalette调色板
CPalette调色板是一种颜色映射接口,它允许应用程序在不影响其他应用程序的前提 下,可以充分利用输出设备的颜色描绘能力。
此外系统中还拥有一些库存GUI对象,你可以利用CDC::SelectStockObject (SelectStockObject( int nIndex )选入这些对象,它们包括一些固定颜色的刷子,画笔和 一些基本字体。 如:
BLACK_BRUSH 黑色刷子
NULL_BRUSH 空刷子
WHITE_PEN 白色画笔
DEVICE_DEFAULT_FONT 默认字体
在Windows中使用GUI对象必须遵守一定的规则。首先需要创建一个合法的对象,不同的对 象创建方法不同。然后需要将该GUI对象选入DC中,同时保存DC中原来的GUI对象。如果选入 一个非法的对象将会引起异常。在使用完后应该恢复原来的对象,这一点特别重要,如果保 存一个临时对象在DC中,而在临时对象被销毁后可能引起异常。有一点必须注意,每一个对 象在重新创建前必须销毁,下面的代码演示了这一种安全的使用方法:
OnDraw (CDC* pDC)
{
a) CPen pen1,pen2;
b) pen1.CreatePen (PS_SOLID,2,RGB(128,128,128));//创建画笔对象一
c) pen2.CreatePen (PS_SOLID,2,RGB(128,128,0));//创建画笔对象二
d) CPen* pOldPen=(CPen*) pDC->SelectObject(&pen1);//选择对象进DC
e) drawWithPen1...
f) (CPen*)pDC->SelectObject(&pen2);//选择对象进DC
g) drawWithPen2...
h) pen1.DeleteObject();//再次创建前先销毁
i) pen1.CreatePen(PS_SOLID,2,RGB(0,0,0));//再次创建对象
j) (CPen*)pDC- >SelectObject(&pen1);//选择对象进DC
k) drawWithPen1...
l) pDC->SelectObject(pOldPen);//恢复
}
OnDraw(CDC* pDC) 函数是VC中最常见的图形输出刷新函数,参数pDC 为CDC类的一个指针,我们通过它进行画图 操作。
代码a行定义CPen 类的两个画笔对象pen1,pen2;分别在行b,c 调用CPen 类成 员函数CreatePen 创建两个实心画笔, 其颜色RGB值分别为RGB(128,128,128), RGB (128,128,0)。行d 将新创建的画笔pen1选入当前设备上下文DC环境并将旧画笔保存在 pOldPen里,这样在e行输出的图形或文本线条将以pen1的属性填充。f, g 行选入画笔二并输 出。i,j 行销毁画笔一并且创建RGB(0,0,0)色的画笔,k行输出。最后一行l行将旧画笔选入 当前DC环境,输出完毕。字体对象,刷子对象及位图对象的使用方法同上,具体使用将在下 面的实例中描述。
在绘图时都需要一个DC对象,DC(Device Context设备环境)对象 是一个抽象的作图环境,可能是对应屏幕,也可能是对应打印机或其它。这个环境是设备无 关的,所以在对不同的设备输出时只需要使用不同的设备环境就行了,而作图方式可以完全 不变。