Windows编程的图形基础(一)HDC, HPEN, HBRUSH

在windows编程中,要在设备(显示器)上显示相应的图像,这里先针对简单的对象,比如line, polygon, 矩形,椭圆等,实现的具体过程如下:

首先要获得设备句柄,有了设备句柄你才可以在相应设备上输出图形,用GetDC和RealseDC函数来获得和释放设备句柄。然后在BeginPaint和EndPaint函数()中执行相应的绘画。

每个设备都有其相应的属性,例如在设备中的输出字体,就有相应的字体属性,有字体颜色,大小,还有TextAlign等属性,通过SetTextAlign及对应的GetTextAlign函数来设定。

当设备要输出对一些线段或一些多边形时,就要有相应的Pen和Brush。Pen,Brush等也有相应的句柄和相应的属性,它们的属性不属于设备属性的值。而Pen,Brush等是属于设备的属性。比如Pen画的线,就有线的宽度和长度和画笔样式,它是一个逻辑画笔,通过CreatePen、 CreatePenIndirect或ExtCreatePen函数中指定这些特征来建立一个逻辑画笔,这些函数传回一个逻辑画笔的句柄,然后设备把这画笔句柄选进设备内容。我们认为,设备内容中目前选中的画笔就是设备内容的一个属性。但是。清除画笔对象是必要的,因为画笔定义占用了分配的内存空间。而在结尾清除设备上下文的句柄也是必要的,他们也占据了一定的内存空间。

 

下面来谈谈HPEN和HBRUSH

首先当然是申明一个HPEN,HPEN    hPen,我们可以通过调用GetStockObject(WHITE_PEN),CreatePen(iPenStyle,iWidth, crColor), 和CreatePenIndirect(CONST LOGPEN*lplgpn)其返回值都是HPEN,他们的区别就是,stock Pen,就是系统库存的pen颜色,他们是WHITE_PEN, BLACK_PEN, NULL_PEN这些样式可以直接从GetStockObject()函数获得。而其中CreatePenIndirect()就是把pen的一些样式属性比如penStyle,width,color的值放入LOGPEN结构体中,从而构建HPEN。

设备上下文通过SelectObject(hdc, hPen)函数把相应的pen选入设备上下文属性中。

在不用这些pen后,应调用DeleteObject(hPen)把他们清理掉。

而HBRUSH的情况和HPEN的情况类似,Windows还有五个函数,可以让您建立逻辑画刷,然后就可使用SelectObject将画刷选进设备内容。与逻辑画笔一样,逻辑画刷也是GDI对象。您建立的所有画刷都必须被删除。

hBrush = CreateSolidBrush (crColor) ;

hBrush = CreateHatchBrush (iHatchStyle,crColor) ; 

CreatePatternBrush

CreateDIBPatternBrushPt

hBrush = CreateBrushIndirect(&logbrush) ; 

变量logbrush是一个型态为LOGBRUSH(「逻辑画刷」 )的结构

一旦您取得到了画刷句柄,就可以使用SelectObject将该画刷选进设备内容:

SelectObject (hdc, hBrush) ; 

然后,您可以使用DeleteObject函数删除所建立的画刷:

DeleteObject (hBrush) ;

其中以上函数的详细信息可以参见MSDN。

你可能感兴趣的:(windows编程)