



与平移操作一样,在缩放操作中需要先定义缩放的变量:
Public sQuad As GLfloat Public MIDDLE_MOUSE_DOWN As Boolean
在VB中,鼠标中键的代码是4。
Private Sub WorkPic_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
LEFT_MOUSE_DOWN = True
OGL.PICT_OLD_X = X - mQuadX * Me.WorkPic.ScaleWidth
OGL.PICT_OLD_Y = Y + mQuadY * Me.WorkPic.ScaleHeight
End If
If Button = 4 Then
OGL.MIDDLE_MOUSE_DOWN = True
PICT_OLD_X = X
PICT_OLD_Y = Y
End If
End Sub
其次,在鼠标移动事件中添加以下代码:
Private Sub WorkPic_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If LEFT_MOUSE_DOWN = True Then
mQuadX = (X - OGL.PICT_OLD_X)/ Me.WorkPic.ScaleWidth
mQuadY = (OGL.PICT_OLD_Y - Y)/ Me.WorkPic.ScaleHeight
Call OGL.Display(Me.WorkPic)
End If
If OGL.MIDDLE_MOUSE_DOWN Then
YY = (PICT_OLD_Y - Y)/ Me.WorkPic.ScaleHeight
OGL.sQuad = OGL.sQuad * (1 - YY)
PICT_OLD_Y = Y
Call OGL.Display(Me.WorkPic)
End If
End Sub
再次,在鼠标释放事件中添加以下代码:
Private Sub WorkPic_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
If Button = 1 Then
LEFT_MOUSE_DOWN = False
End If
If Button = 4 Then
OGL.MIDDLE_MOUSE_DOWN = False
End If
End Sub
最后,在Display函数中,在设置绘图坐标系后添加以下代码:
glMatrixMode mmProjection glLoadIdentity GLU.gluOrtho2D 0, 1, 0, 1 GL.glTranslatef mQuadX, mQuadY, mQuadZ GL.glScalef sQuad, sQuad, 0#
与平移不同,缩放比例初始值为1。因此需要在窗体启动的时候对sQuad进行赋值。
Private Sub Form_Load() sQuad = 1 Call Me.IniColor Call OGL.EnableOpenGL(Me.WorkPic) End Sub
缩放运行结果如图3-20所示。
图3-20 缩放运行结果