用move函数
限制拖动的大小

解决方案 »

  1.   

    可以这样:
    在Form_Resize事件中
    if Me.With<100* screen.TwipsPerPixelX then me.with=100* Screen.TwipsPerPixelX 
    if Me.Height<100* screen.TwipsPerPixelX then me.Height=100* Screen.TwipsPerPixelX
    还有另一种拦截消息的方法:
      

  2.   

    在模块中:
    '模块代码
    Option ExplicitPrivate Type POINTAPI
      x As Long
      y As Long
    End TypePrivate Const WM_GETMINMAXINFO As Long = &H24&Private Type MINMAXINFO
      ptReserved As POINTAPI
      ptMaxSize As POINTAPI
      ptMaxPosition As POINTAPI
      ptMinTrackSize As POINTAPI
      ptMaxTrackSize As POINTAPI
    End Type
    Private g_nProcOld As LongPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, _
                                                                                            ByVal cBytes&)
                                                                                            
    Private Declare Function CallWindowProc& Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc&, _
                                                      ByVal hWnd&, ByVal Msg&, ByVal wParam&, ByVal lParam&)Private Const GWL_WNDPROC As Long = (-4&)
      
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd&, _
                                                                ByVal nIndex&, ByVal dwNewLong&) As LongPrivate FixMinWid As Long, FixMinHig As Long, FixMaxWid As Long, FixMaxHig As Long, FixMaxX As Long, FixMaxY As LongPublic Sub FixSizeHook(Frm As Form, Optional ByVal MinWidth As Long = -1, Optional ByVal MinHeight As Long = -1, _
                                                 Optional ByVal MaxWidth As Long = -1, Optional ByVal MaxHeight As Long = -1, _
                                                 Optional ByVal MaxX As Long = -1, Optional ByVal MaxY As Long = -1)
        FixMinWid = IIf(MinWidth < 0, 0, MinWidth)
        FixMinHig = IIf(MinHeight < 0, 0, MinHeight)
        FixMaxWid = IIf(MaxWidth < 0, Screen.Width \ Screen.TwipsPerPixelX, MaxWidth)
        FixMaxHig = IIf(MaxHeight < 0, Screen.Height \ Screen.TwipsPerPixelY, MaxHeight)
        FixMaxX = IIf(MaxX < 0, 0, MaxX)
        FixMaxY = IIf(MaxY < 0, 0, MaxY)
        
        g_nProcOld = SetWindowLong(Frm.hWnd, GWL_WNDPROC, AddressOf WindowProc)
    End Sub
      
    Public Sub FixSizeUnHook(Frm As Form)
        Call SetWindowLong(Frm.hWnd, GWL_WNDPROC, g_nProcOld)
    End Sub
      
    Private Function WindowProc(ByVal hWnd As Long, ByVal iMsg As Long, _
                                                  ByVal wParam As Long, ByVal lParam As Long) As Long
        
      Select Case iMsg
        
        Case WM_GETMINMAXINFO
          Dim udtMINMAXINFO As MINMAXINFO
          
          CopyMemory udtMINMAXINFO, ByVal lParam, Len(udtMINMAXINFO)
               
          With udtMINMAXINFO
            .ptMaxSize.x = FixMaxWid
            .ptMaxSize.y = FixMaxHig
            
            .ptMaxPosition.x = FixMaxX
            .ptMaxPosition.y = FixMaxY
            
            .ptMaxTrackSize.x = .ptMaxSize.x
            .ptMaxTrackSize.y = .ptMaxSize.y
            
            .ptMinTrackSize.x = FixMinWid
            .ptMinTrackSize.y = FixMinHig
          End With
               
          CopyMemory ByVal lParam, udtMINMAXINFO, Len(udtMINMAXINFO)
      
          WindowProc = 0&
          
          Exit Function
          
      End Select
      
      WindowProc = CallWindowProc(g_nProcOld, hWnd, iMsg, wParam, lParam)End Function
    在窗体的Form_Load事件中:
    FixSizeHook Me,  200, 100, 400, 600, 30, 100    '限制最小及最大尺寸和坐标在窗体的Form_UnLoad事件中:
    FixSizeUnHook Me