【笨嘴拙舌WINDOWS】GDI绘制区域

在默认情况下,Gdi绘画操作的使用白纸(窗口的客户区)黑字(Pen的颜色)!前面我们已经讲过如何改笔,现在来学习改变白纸(GDI的绘制区域)

正常的纸为一个矩形形状!有时候小孩不小心撕掉纸的一角,不小心被纸中间掏空了,又或者纸被剪成了艺术品,比如:

image

如果在这样的图片上垂直方向的中央划一根4个像素的黑色的线条讲呈现出下面的效果

    image

黑色的线条被纸分层了若干段,因为白色的部分不是纸!

Winodws提供的绘制区域也就是相当于上面提到的纸!其中可用函数的的有

hRgn = CreateRectRgn(xLeft,yTop.xRight,yBottom)       矩形区域

hRgn = CreateRectRgnIndirect(&rect)                            同上

hRgn = CreateEllipticRgn(xLeft,yTop.xRight,yBottom)    椭圆区域     

hRgn = CreateEllipticRgnIndirect(&rect)                         同上

hRgn = CreatePolygonRgn(&point,iCount,iPolyFillMode)多边形区域

如果有多个区域,可以使用一个函数来合并

CombinRgn(hDestRgn,hSrcRgn1,hSrcRgn2,iCombine)

“将hSrcRgn1和hSrcRgn2使用iCombine方式合并为结果hDestRgn,iCombine可取值有:

Icombine值 hDestRgn
RGN_AND 两个区域的公共部分
RGN_OR 两个区域的全部
RGN_XOR 两个区域的全部除去公共部分
RGN_DIFF hSrcRgn1不在黑hSrcRgn2中的部分
RGN_COPY hSrcRgn1的全部(忽略hSrcRgn2)

区域的句柄可用于4个绘图函数

FillRgn(hdc,hRgn,hBrush)                                   用指定画刷填充

FrameRgn(hdc,hRgn,hBrush,XFrame,yFrame)    用画刷填充边框

                                                                        (边框宽高由XFrame,yFrame)

InvertRgn(hdc,hRgn)                                     将区域中的颜色像素反转

PaintRgn(hdc,hRgn)                                           用当前画刷填充

原文地址:https://www.cnblogs.com/pavkoo/p/3302708.html