如何在运行时限制窗口Resize的大小VB6中比方说要允许用户调整窗口大小
可窗口的Width和Height应该有个最小值
否则用户就没法操作了在窗体中写下这样的语句,
Private Sub Form_Resize()
If Form1.ScaleHeight < 2000 Then
    Form1.Height = 2000
End If
If Form1.ScaleWidth < 2000 Then
    Form1.Width = 2000
End If
End Sub
当窗口小于2000时,调整导致界面闪烁严重.
请问,如何在运行时限制窗口Resize的大小?

解决方案 »

  1.   

    '新建一个标准模块.
    '代码如下
    Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
      (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
     Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" _
      (ByVal hwnd As Long, ByVal nIndex As Long) As Long
     Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" _
      (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, _
       ByVal wParam As Long, ByVal lParam As Long) As Long Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" ( _
       lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
     Public Const GWL_WNDPROC = (-4)
     Public Const WM_GETMINMAXINFO = &H24
     Type POINTAPI
            x As Long
            y As Long
     End Type
     Type MINMAXINFO
            ptReserved As POINTAPI
            ptMaxSize As POINTAPI
            ptMaxPosition As POINTAPI
            ptMinTrackSize As POINTAPI
            ptMaxTrackSize As POINTAPI
     End Type
     Public preWinProc As Long Public Function wndproc(ByVal hwnd As Long, ByVal Msg As Long, _
                             ByVal wParam As Long, ByVal lParam As Long) As Long
     Dim lwd As Long, hwd As Long
     If Msg = WM_GETMINMAXINFO Then
         Dim maxmin As MINMAXINFO
         CopyMemory maxmin, ByVal lParam, Len(maxmin)
         maxmin.ptMaxTrackSize.x = 500 '设定最大Resize的宽度
         maxmin.ptMaxTrackSize.y = 400 '设定最大Resize的高度
         maxmin.ptMinTrackSize.x = 300 '设定最大小Resize的宽度
         maxmin.ptMinTrackSize.y = 300 '设定最大小Resize的高度
         CopyMemory ByVal lParam, maxmin, Len(maxmin)
     Else
        wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
     End If
     End Function
    '窗体的代码
    Sub Form_Load()
     Dim ret As Long
     preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
     ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf wndproc)
     End Sub Private Sub Form_Unload(Cancel As Integer)
     Dim ret As Long
     ret = SetWindowLong(Me.hwnd, GWL_WNDPROC, preWinProc)
     End Sub
      

  2.   

    最简单的办法,在FORM_LOAD里面保存窗体大小.
    在FORM_RESIZE里面,将保存的值赋给窗体的属性.