第五章 图形基础part4

来源:互联网 发布:韩国消费水平知乎 编辑:程序博客网 时间:2024/05/16 12:36

 5.6矩形、区域和剪裁

 矩形函数:
FillRect (hdc, &rect, hBrush) ;//用指定画刷来填入矩形
FrameRect (hdc, &rect, hBrush) ;//使用画刷画矩形框,但是不填入矩形
InvertRect (hdc, &rect) ;//将矩形中所有图素翻转,1转换成0,0转换为1,该函数将白色区域转变成黑色,黑色区域转变为白色,绿色区域转变成洋红色。

Windows还提供了9个函数, 使您可以更容易、 更清楚地操作RECT结构。
SetRect (&rect, xLeft, yTop, xRight, yBottom) ; 
OffsetRect (&rect, x, y) ;//将矩形沿x轴和y轴移动几个单元
InflateRect (&rect, x, y) ; //将矩形沿x轴和y轴移动几个单元
SetRectEmpty (&rect) ; //矩形各字段设定为0
CopyRect (&DestRect, &SrcRect) ; //将矩形复制给另一个矩形
IntersectRect (&DestRect, &SrcRect1, &SrcRect2) ;//取得两个矩形的交集
UnionRect (&DestRect, &SrcRect1, &SrcRect2) ; //取得两个矩形的联集
bEmpty = IsRectEmpty (&rect) ;//确定矩形是否为空
bInRect = PtInRect (&rect, point) ;//确定点是否在矩形内

 

随机矩形:
PeekMessage (&msg, NULL, 0, 0, PM_REMOVE) ;四个参数(一个指向MSG结构的指针、一个窗口句柄、两个值指示消息范围)当队列中没有消息时,

PeekMessage传回FALSE(0) 。
如果要将消息从消息队列中删除,则将PeekMessage的最后一个参数设定为PM_REMOVE。如果您不希望删除消息,那么您可以将这个参数设定为PM_NOREMOVE
从队列中删除WM_PAINT消息的唯一方法是令窗口显示区域的失效区域变得有效。这就是为什么Peek_Message是「偷看」而不是「取得」的原因,它使得程序可以检查程序的队列中的下一个消息,而不实际删除它。

RANDRECT

   

建立和绘制剪裁区域:
剪裁区域是GDI对象,您应该呼叫DeleteObject来删除您所建立的剪裁区域。
1剪裁区域是矩形:hRgn = CreateRectRgn (xLeft, yTop, xRight, yBottom) ;或者是hRgn = CreateRectRgnIndirect (&rect);
2剪裁区域是圆角的矩形:hRgn = CreateEllipticRgn (xLeft, yTop, xRight, yBottom) ;或者是hRgn = CreateEllipticRgnIndirect (&rect) ;
3剪裁区域是多边形:hRgn = CreatePolygonRgn (&point, iCount, iPolyFillMode) ; point参数是一个POINT型态的结构数组,iCount是点的数目, 

iPolyFillMode是ALTERNATE或者WINDING。
4.iRgnType = CombineRgn (hDestRgn, hSrcRgn1, hSrcRgn2, iCombine) ;这一函数将两个剪裁区域(hSrcRgn1和hSrcRgn2)组合起来并用句柄hDestRgn指

 向组合成的剪裁区域。iCombine参数说明hSrcRgn1和hSrcRgn2如何组合
矩形与区域的剪裁:
区域也在剪裁中扮演了一个角色。InvalidateRect函数使显示的一个矩形区域失效,并产生一个WM_PAINT消息。通过呼叫GetUpdateRect来取得失效矩形的

坐标,并且可以使用ValidateRect函数使显示区域的矩形有效。
CLOVER程序:

原创粉丝点击