我用以下的方法实现,但是只能限制窗口的最大大小,而不能限制窗口的最小大小,这个问题怎么解决啊?请给位高手赐教!Option Explicit
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Public 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
Public Declare Sub CopyMemory Lib "KERNEL32" Alias "RtlMoveMemory" (lpvDest As Any, lpvSource As Any, ByVal cbCopy As Long)
Public Declare Function SetWindowPos& Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long)
Public Const GWL_winsize = (-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 Prewinsize As LongPublic Function winsize(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
    Dim maxwin As MINMAXINFO
    If Msg = WM_GETMINMAXINFO Then
        CopyMemory maxwin, ByVal lParam, Len(maxwin)
        maxwin.ptMinTrackSize.x = 640 '设定最大Resize的宽度
        maxwin.ptMinTrackSize.y = 480 '设定最大Resize的高度
        maxwin.ptMaxTrackSize.x = 800
        maxwin.ptMaxTrackSize.y = 600
        CopyMemory ByVal lParam, maxwin, Len(maxwin)
    End If
    winsize = CallWindowProc(Prewinsize, hwnd, Msg, wParam, lParam)
 End Function

解决方案 »

  1.   

    哪里用的了这么麻烦。在form的resize里,写代码就可以了。
      

  2.   

    在窗体的Resize事件里面控制。if me.width<**** then me.width=****
    if me.height<**** then me.height=****
      

  3.   

    vb 不大好弄,因为会闪烁VB.NET 就有现成的属性
      

  4.   

    如果Resize足够好用的话,我干嘛用API,没有发现会闪烁马?我在窗体的Paint事件中加入了绘图的成分,一闪烁么,还不知道有多么难看!请各位再帮我想想办法吧!还有,以上的代码我有用钩子啊!
    Public Function winsize(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
        Dim maxwin As MINMAXINFO
        If Msg = WM_GETMINMAXINFO Then
            CopyMemory maxwin, ByVal lParam, Len(maxwin)
            maxwin.ptMinTrackSize.x = 640 '设定最大Resize的宽度
            maxwin.ptMinTrackSize.y = 480 '设定最大Resize的高度
            maxwin.ptMaxTrackSize.x = 800
            maxwin.ptMaxTrackSize.y = 600
            CopyMemory ByVal lParam, maxwin, Len(maxwin)
        End If
        winsize = CallWindowProc(Prewinsize, hwnd, Msg, wParam, lParam)
     End Function
    这就是我的钩子,再form_load中挂上