六、矩形、区域和剪裁—矩形与区域的剪裁
区域也在剪裁中扮演了一个角色。InvalidateRect函数使显示的一个矩形区域失效,并产生一个WM_PAINT消息。例如,您可以使用InvalidateRect函数来清除显示区域并产生一个WM_PAINT消息:
您可以通过呼叫GetUpdateRect来取得失效矩形的坐标,并且可以使用ValidateRect函数使显示区域的矩形有效。当您接收到一个WM_PAINT消息时,无效矩形的坐标可以从PAINTSTRUCT结构中得到,该结构是用BeginPaint函数填入的。这个无效矩形还定义了一个「剪裁区域」,您不能在剪裁区域外绘图。
Windows有两个作用于剪裁区域而不是矩形的函数,它们类似于InvalidateRect和ValidateRect:
和
当您接收到一个由无效区域引起的WM_PAINT消息时,剪裁区域不一定是矩形。
您可以使用以下两个函数之一:
或
通过将一个剪裁区域选进设备内容来建立自己的剪裁区域,这个剪裁区域使用设备坐标。
GDI为剪裁区域建立一份副本,所以在将它选进设备内容之后,使用者可以删除它。Windows还提供了几个对剪裁区域进行操作的函数,如ExcludeClipRect用于将一个矩形从剪裁区域里排除掉,IntersectClipRect用于建立一个新的剪裁区域,它是前一个剪裁区域与一个矩形的交,OffsetClipRgn用于将剪裁区域移动到显示区域的另一部分。
InvalidateRect (hwnd, NULL, TRUE) ;
Windows有两个作用于剪裁区域而不是矩形的函数,它们类似于InvalidateRect和ValidateRect:
InvalidateRgn (hwnd, hRgn, bErase) ;
ValidateRgn (hwnd, hRgn) ;
您可以使用以下两个函数之一:
SelectObject (hdc, hRgn) ;
SelectClipRgn (hdc, hRgn) ;
GDI为剪裁区域建立一份副本,所以在将它选进设备内容之后,使用者可以删除它。Windows还提供了几个对剪裁区域进行操作的函数,如ExcludeClipRect用于将一个矩形从剪裁区域里排除掉,IntersectClipRect用于建立一个新的剪裁区域,它是前一个剪裁区域与一个矩形的交,OffsetClipRgn用于将剪裁区域移动到显示区域的另一部分。