图形基础(七十八)

2010-12-30 21:10:52 · 作者: · 浏览: 40645
rcRgn1, hSrcRgn2, iCombine) ;

这一函式将两个剪裁区域(hSrcRgn1和hSrcRgn2)组合起来并用代号hDestRgn指向组合成的剪裁区域。这三个剪裁区域代号都必须是有效的,但是hDestRgn原来所指向的剪裁区域被破坏掉了(当您使用这个函式时,您可能要让hDestRgn在初始时指向一个小的矩形剪裁区域)。

iCombine参数说明hSrcRgn1和hSrcRgn2如何组合,见表5-9。

表5-9
iCombine值新剪裁区域
RGN_AND 两个剪裁区域的公共部分 RGN_OR 两个剪裁区域的全部 RGN_XOR 两个剪裁区域的全部除去公共部分 RGN_DIFF hSrcRgn1不在hSrcRgn2中的部分 RGN_COPY hSrcRgn1的全部(忽略hSrcRgn2)

从CombineRgn传回的iRgnType值是下列之一:NULLREGION,表示得到一个空剪裁区域;SIMPLEREGION,表示得到一个简单的矩形、椭圆或者多边形;COMPLEXREGION,表示多个矩形、椭圆或多边形的组合;ERROR,表示出错了。

剪裁区域的代号可以用於四个绘图函式:

FillRgn (hdc, hRgn, hBrush) ;
FrameRgn (hdc, hRgn, hBrush, xFrame, yFrame) ;
InvertRgn (hdc, hRgn) ;
PaintRgn (hdc, hRgn) ;

FillRgn、FrameRgn和InvertRgn类似於FillRect、FrameRect和InvertRect。FrameRgn的xFrame和yFrame参数是画在区域周围的边框的宽度和高度。PaintRgn函式用装置内容中目前画刷填入所指定的区域。所有这些函式都假定区域是用逻辑座标定义的。

在您用完一个区域後,可以像删除其他GDI物件那样删除它:

DeleteObject (hRgn) ;

矩形与区域的剪裁
 

区域也在剪裁中扮演了一个角色。InvalidateRect函式使显示的一个矩形区域失效,并产生一个WM_PAINT讯息。例如,您可以使用InvalidateRect函式来清除显示区域并产生一个WM_PAINT讯息:

InvalidateRect (hwnd, NUL