windows程序设计对矩形的操作

1、对矩形的操作
将矩形沿x轴和y轴移动几个单位:OffsetRect (&rect, x,y);
增大或减小矩形的尺寸:InflateRect(&rect,X,y);
把矩形结构的各字段设置为0:SetRectEmpty (&rect) ;
将一个矩形结构复制到另-一个矩形结构:CopyRect (&DestRect, &SrcRect) ;
获取两个矩形的交集:IntersectRect (&DestRect, &SrcRect1, &SrcRect2) ;
获取两个矩形的并集:UnionRect(&DestRect,&SrcRect1, &SrcRect2);
判断矩形是否为空:bEmpty = IsRect Empty (&rect) ;
判断点是否在矩形内部:bInRect = PtInRect (&rect, point) ;
2、使客户区的无效区域变成有效是从队列中删除WM_ PAINT消息的唯- 办法,可以使用ValidateRect、ValidateRgn 或者成对的BeginPaint和EndPaint函数来完成。如果使用PeekMessage函数从消息队列中获取WM PAINT消息后,按照正常的方式对它进行处理,
3、建立和绘制区域
在客户区的任何一个位置,都可以进行绘图或者裁剪一块区域。讲区域选入设备环境,就可以使用这个区域来剪裁(也就是说,将绘制动作限制在客户区的一个特定部分)。同画笔和画刷一样,区域也是GDI对象,应当通过调用DeleteObject函数来删除所有建立的区域。
建立矩形区域:hRgn = CreateRectRgn (xLeft, y’Top,xRight, yBottom) ;
或者:hRgn = CreateRect RgnIndirect(&rect) ;
建立椭圆区域:hRgn= CreateEllipticRgn (xLeft, yTop, xRight, yBottom) ;
或者:hRgn = CreateEllipticRgnIndirect (&rect) ;

创建圆角矩形:hRgn = CreatePolygonRgn (&point, iCount, iPolyFillMode) ;参数point是一个类型为POINT 结构的数组,iCount 是点的个数,iPolyFillMode 或者是ALTERNATE,或者是WINDING。你也可 以调用CreatePolygonRgn 函数创建多个多边形区域。
最后别忘了用完一个区域后,可以用与删除其他GDI对象相同的函数来删除它:Deleteobject (hRgn) :
4、矩形与区域的裁剪
区域在剪裁中也扮演着重要角色。InvalidRect函数使显示的矩形区域无效,并产生一个WM_PAINT消息。例如,可以使用InvalidateRect函数来擦除客户区的内容,并产生一个WM_PAINT消息:InvalidateRect(hwnd, null, TRUE);可以通过调用GetUpdateRect函数获取无效矩形的坐标,并且使用ValidateRect函数使客户区的矩形有效。当接收到WM_PAINT消息时,PAINTSTRUCT结构中的无效矩形的坐标是可以利用的。这个结构是通过BeginPaint函数填充的,这个无效矩形也定义了一个“剪裁区域“。不能在剪裁区域之外绘图。windows有两个类似InvalidateRgn(hwnd, hRgn, bErase);和ValidateRgn(hwnd, hRgn);当接收一条由无效区域产生的WM_PAINT消息时,建材区域在形状上不一定是矩形。可以通过将一个区域选入都设备来创建你自己的剪裁区域,将区域选入设备环境可以使用SelectObject(hdc, hRgn);或者SelectClipRgn(hdc, hRgn);
收获满满,加油,我跟你一样是个小白,我们一起加油。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值