判断两个矩形是否相交,可以自己写一个函数判断,也可以用你说的那个函数判断,但你说的那个函数主要的目的不是为了判断两个矩形是否相交。
用该函数的方法:
HRGN hRgn1 = CreateRectRgn(rc1.left, rc1.top, rc1.right, rc1.bottom);
HRGN hRgn2 = CreateRectRgn(rc2.left, rc2.top, rc2.right, rc2.bottom);
//用RGN_AND标志表示你要合并两个区域并得到交集
HRGN hRgnSum = NULL;
int nRet = CombineRgn(hRgnSum, hRgn1, hRgn2, RGN_AND);
if (nRet == SIMPLEREGION)
{ //有交集
//得到交集矩形
RECT rc3;
GetRgnBox(hRgnSum, &rc3);
}
else if (nRet == NULLREGION)
//没有交集
DeleteObject(hRgnSum);
DeleteObject(hRgn2);
DeleteObject(hRgn1);
-
补充:
-
第二种方法:
//用来将所有的矩形调整为左上右下的形式
//其中swap函数没有实现,因为太简单了
void AdjustRect(RECT &rc)
{
if (rc.left > rc.right)
swap(rc.left, rc.right);
if (rc.top > rc.bottom)
swap(rc.top, rc.bottom);
}//用来判断是否有交集,最后的参数返回有交集时候的矩形
//max和min函数没有实现,因为太简单了
BOOL HasIntersect(const RECT &rc1, const RECT &rc2, RECT &rc3)
{
RECT src1 = rc1;
AdjustRect(src1);
RECT src2 = rc2;
AdjustRect(src2);rc3 = RECT(0, 0, 0, 0);
if (((src1.right < src2.left) && (src1.bottom < src2.top))
|| ((src1.left > src2.right) && (src1.top > src2.bottom)))
return FALSE;rc3.left = max(src1.left, src2.left);
rc3.right = min(src1.right, src2.right);
rc3.top = max(src1.top, src2.top);
rc3.bottom = min(src1.bottom, src2.bottom);
return TRUE;
}