简单的坐标转换: 假定 Image 是直接放在 Form 上的,那么中心点就是 (ScaleWidth/2, ScaleHeight/2)。 将当前 Image 控件的四边 (Left,Top,Right,Botton) 坐标转换成以中心点为原点的临时坐标。 将临时坐标乘以放大比例。 最后在转换为窗体左上角为原点的客户区坐标,按此移到和缩放 Image 控件。 Option ExplicitPrivate Sub Zoom(ByVal dScale As Double) Dim dX As Double, dY As Double Dim dLeft As Double, dTop As Double, dRight As Double, dBottom As Double
假定 Image 是直接放在 Form 上的,那么中心点就是 (ScaleWidth/2, ScaleHeight/2)。
将当前 Image 控件的四边 (Left,Top,Right,Botton) 坐标转换成以中心点为原点的临时坐标。
将临时坐标乘以放大比例。
最后在转换为窗体左上角为原点的客户区坐标,按此移到和缩放 Image 控件。
Option ExplicitPrivate Sub Zoom(ByVal dScale As Double)
Dim dX As Double, dY As Double
Dim dLeft As Double, dTop As Double, dRight As Double, dBottom As Double
dX = ScaleWidth / 2
dY = ScaleHeight / 2
dLeft = (Image1.Left - dX) * dScale + dX
dTop = (Image1.Top - dY) * dScale + dY
dRight = (Image1.Left + Image1.Width - dX) * dScale + dX
dBottom = (Image1.Top + Image1.Height - dY) * dScale + dY
Image1.Move dLeft, dTop, dRight - dLeft, dBottom - dTop
End SubPrivate Sub Form_Load()
Me.ScaleMode = vbPixels
Set Image1.Picture = LoadPicture("C:\WINDOWS\Web\Wallpaper\Bliss.bmp")
Image1.Move 0, 0
Image1.Stretch = True
End SubPrivate Sub Image1_DblClick()
'模拟移动'
Image1.Move Image1.Left + 100 * (0.5 - Rnd), Image1.Top + 100 * (0.5 - Rnd)
End SubPrivate Sub mnuZoomIn_Click()
Zoom 2 '放大'
End SubPrivate Sub mnuZoomOut_Click()
Zoom 0.5 '缩小'
End Sub