Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End Type
Public Declare Function IntersectRect Lib "user32" ( _
lpDestRect As RECT, _
lpSrc1Rect As RECT, _
lpSrc2Rect As RECT _
) As Long
Option Explicit
Private Function iRect(ByRef iRect1 As RECT, ByRef iRect2 As RECT) As Boolean
Dim rtLong As Long
Dim mRT As RECT
rtLong = IntersectRect(mRT, iRect1, iRect2)
If rtLong > 0 Then
iRect = True
Else
iRect = False
End If
End Function
'窗体上加二个Shape
Private Sub Command1_Click()
Dim rt1 As RECT, rt2 As RECT
Dim BRect As Boolean
rem 做个例子,方便初学者。
rem 判断两个矩形是否存在重叠部分的算法
rem 以下代码放入Form1中并放入Shape1 ,shape2,Command1
Option Explicit
Private Declare Function IntersectRect Lib "user32" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long
Private Type RECT
X1 As Long
Y1 As Long
X2 As Long
Y2 As Long
End Type
Dim RECT1 As RECT
Dim RECT2 As RECT
Dim DEST_REST As RECT
'测试
Private Sub Command1_Click()
If setRECT(Shape1, Shape2) > 0 Then
Debug.Print "相交!"
Else
Debug.Print "不相交!"
End If
End Sub
'通用函数,测试2个控件是否相交
'返回值大于0---相交
'返回值等于0---不相交
Function setRECT(obj1 As Control, obj2 As Control) As Long
RECT1.X1 = obj1.Left
RECT1.Y1 = obj1.Top
RECT1.X2 = obj1.Left + obj1.Width
RECT1.Y2 = obj1.Top + obj1.Height
RECT2.X1 = obj2.Left
RECT2.Y1 = obj2.Top
RECT2.X2 = obj2.Left + obj2.Width
RECT2.Y2 = obj2.Top + obj2.Height
setRECT = IntersectRect(DEST_REST, RECT1, RECT2)
End Function
用intersectrect:
【VB声明】
Private Declare Function IntersectRect Lib "user32" Alias "IntersectRect" (lpDestRect As RECT, lpSrc1Rect As RECT, lpSrc2Rect As RECT) As Long