识海日志——时间都去哪了(20140305)

Chapter 1 VC/MFC 怎样判断两个矩形区域是否出现交叉或重叠现

Solution 1:

CRect rect1,rect2;
...................
CRgn rgn;
rgn.CreateRectRgn(rect1.left,rect1.top,rect1.right,rect1.bottom);
if (rgn.RectInRegion(&rect2))
{
    //相交
}
else
{
    //不相交
}

Solution 2:

CRect::IntersectRect
Nonzero if the intersection is not empty; 0 if the intersection is empty. 


Solution 3:

bool IsCross( RECT *rect1, RECT *rect2 )
{
  RECT rcTmp;
  rcTmp.left = _max( rect1->left, rect2->left );
  rcTmp.top = _max( rect1->top, rect2->top );
  rcTmp.right = _min( rect1->right, rect2->right );
  rcTmp.bottom = _min( rect1->bottom, rect2->bottom );
  return (rcTmp.right > rcTmp.left && rcTmp.bottom > rcTmp.top);
}

Solution 4:

可以使用CRgn类的int nResult = CombineRgn(&rectA,&rectB,RGN_AND);
如果nResult != NULLREGION那么他们就是重叠的.


Solution 5:

CRect::UnionRect


以上方案未一一验证。

参考:

http://bbs.csdn.net/topics/190139350

http://bbs.csdn.net/topics/330241157


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值