与平移操作一样,在缩放操作中需要先定义缩放的变量:
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 缩放运行结果