第3节 GDI对象
在Windows应用程序中,设备环境(DC)与图形对象协同进行绘图显示工作。就像画家绘画一样,设备环境好比是画家的画布,图形对象好比是画家的画具。画家使用不同的画笔、刷子以及颜料等,画出不同色彩和不同线条的画。
1)GDI对象包括六种类型,全部由CGdiObject类派生,如图7-14所示。
①CPen(画笔):用于修饰线条的颜色、宽度和线型(实线、虚线或点画线等)。
②CBrush(画刷):用于修饰一个闭合图形内部的填充内容(填充颜色、填充线条以及平铺位图)。
③CFont(字体):用于修饰输出文字的样式、高度、粗细以及字间距等。
④CBitmap(位图):用于显示和处理点阵图像的GDI对象。
⑤CRgn(区域):用于修饰输出图像的不规则边界,例如,椭圆或多边形等。
⑥CPalette(调色板):用于修饰输出图像的色调,例如,16色或256色等。

图7-14 GDI对象
2)颜色类型变量COLORREF的定义。
typedef DWORD COLORREF;
typedef DWORD *LPCOLORREF;
COLORREF是4字节(32位)变量,用于描绘一个颜色时对应于十六进制格式是0x00bbggrr。任何一种颜色都是由红、蓝、绿三种基色组合而成的,三种不同强度的基色分量合并生成各种颜色。每种基色的强度范围是0~255共有256种,三种颜色叠加在一起可以生成24位色也就是真彩色。
3)RGB宏函数颜色处理函数。
#define RGBr(,g,b)\(https://www.daowen.com)
C(OLORREF)((B(YTE)r()|(W(ORD)(B(YTE)g())<<8))|((D(WORD)B(YTE)b())<<16))
RGB宏函数的功能是将红、蓝、绿三个数值,合并到一个COLORREF类型数值中。常见颜色的RGB数值见表7-2。
COLORREF c1=RGB2(55,255,0);
表7-2 常见颜色的RGB数值

说明:凡RGB三个分量值相等都属于不同深浅的灰色
4)获取颜色分量值的宏函数。
#define GetRValue (rgb)((BYTE)(rgb))
#define GetGValue (rgb)((BYTE)(((WORD)(rgb))>>8)
#define GetBValue (rgb)((BYTE)((rgb)>>16))
这三个宏函数,分别用于获取颜色(COLORREF)数值的红、蓝、绿分量值。
int r=GetRValue(c1);
int g=GetGValue(c1);
int b=GetBValue(c1);