5.4绘制填入区域
Windows将HBRUSH定义为画刷的句柄hBrush = GetStockObject(GRAY_BRUSH);呼叫SelectObject将它选进设备内容SelectObject(hdc, hBrush);画一个没有边界框的图形SelectObject(hdc, GetStockObject(NULL_PEN)) ;画出图形的边界框,但不填入内部SelectObject(hdc, GetStockobjec(NULL_BRUSH);
Polygon函数和多边形填入方式:
Polygon是第六个画带边界框的填入图形的函数Polygon(hdc, apt, iCount);apt参数是POINT结构的一个数组,iCount是点的数目。
PolyPolygon(hdc, apt, aiCounts, iPolyCount);该函数绘制多个多边形。最后一个参数给出了所画的多边形的个数。
填入内部的方式SetPolyFillMode(hdc, iMode);多边形填入方式有ALTERNATE和WINDING。
用画刷填入内部:
Rectangle、RoundRect、Ellipse、Chord、Pie、Polygon和PolyPolygon图形的内部是用选进设备内容的目前画刷(也称为「图样」)来填入的。画刷是一个8×8的位图,它水平和垂直地重复使用来填入内部区域。
hBrush = CreateSolidBrush (crColor);该函数创建一个具有指定颜色的逻辑刷子。
hBrush = CreateHatchBrush (iHatchStyle, crColor) ; 「影线标记(hatch marks)」来建立画刷。
使用CreatePatternBrush和CreateDIBPatternBrushPt建立自己的位图画刷。
hBrush = CreateBrushIndirect (&logbrush) ; 变量logbrush是一个型态为LOGBRUSH(「逻辑画刷」)的结构。
使用DeleteObject函数删除所建立的画刷。
ALTWIND
5.5GDI 映像方式
几乎所有GDI函数中,这些坐标值使用的都是一种「逻辑单位」 。Windows必须将逻辑单位转换为「设备单位」,即图素。这种转换是由映像方式、窗口和视端口的原点以及窗口和视端口的范围所控制的。Windows定义了8种映像方式,下面是如何设定映射方式和获取映射方式的方法。
SetMapMode(hdc, iMapMode);
iMapMode = GetMapMode (hdc);
内定映像方式为MM_TEXT在这种映像方式下,逻辑单位与实际单位相同,这样我们可以直接以图素为单位进行操作。如果映像方式设定为MM_LOENGLISH则逻辑单位是百分之一。不变的规律是窗口原点总被映设到视端口原点。
「视端口」是依据设备坐标(图素)的。
「窗口」是依据逻辑坐标的,逻辑坐标可以是图素、毫米、英寸或者您想要的任何其它单位。
设定映像模式为MM_LOENGLISH,并将视端口原点改为显示窗口中央:
SetMapMode (hdc, MM_LOENGLISH) ;
SetViewportOrgEx (hdc, cxClient / 2, cyClient / 2, NULL) ;
cxClient,cyClient为显示窗口宽和高,由WM_SIZE的wParam参数传回。
WHATSIZE