我想让VB窗体小到一定程度(或大到一定程度)就不在改变窗体的大小
Private Sub Form_Resize()
    If Me.Width <= 500 * 15 Then Me.Width = 500 * 15
    If Me.Height <= 500 * 15 Then Me.Height = 500 * 15
End Sub
用上面的做法可以做到,但是当窗体的高或宽等于500*15的时候,在缩小窗体会看到闪耀的。还有什么好办法可以得到这样的效果吗?等待高人的指点!多谢!!

解决方案 »

  1.   

    可以用子类处理,方法如下:模块中:Option ExplicitDeclare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (pDest As Any, pSource As Any, ByVal ByteLen 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 LongPublic Const GWL_WNDPROC = (-4)
    Public Const WM_GETMINMAXINFO = &H24
    Public OldWindowProc As LongType POINTAPI
         x As Long
         y As Long
    End TypeType MINMAXINFO
        ptReserved As POINTAPI
        ptMaxSize As POINTAPI
        ptMaxPosition As POINTAPI
        ptMinTrackSize As POINTAPI
        ptMaxTrackSize As POINTAPI
    End TypePublic Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wp As Long, ByVal lp As Long) As Long
        If Msg = WM_GETMINMAXINFO Then
            Dim MinMax As MINMAXINFO
            
            CopyMemory MinMax, ByVal lp, Len(MinMax)
            
            MinMax.ptMinTrackSize.x = 300
            MinMax.ptMinTrackSize.y = 200
            
            MinMax.ptMaxTrackSize.x = 640
            MinMax.ptMaxTrackSize.y = 480
            
            CopyMemory ByVal lp, MinMax, Len(MinMax)
            
            WndProc = 1
            Exit Function
        End If
        WndProc = CallWindowProc(OldWindowProc, hwnd, Msg, wp, lp)
    End Function窗口中:    'w = 200: h = 100
        OldWindowProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
        Call SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WndProc)
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
        Call SetWindowLong(Me.hwnd, GWL_WNDPROC, OldWindowProc)
    End Sub
      

  2.   

    http://expert.csdn.net/Expert/topic/2832/2832408.xml?temp=.8711664
      

  3.   


    来个简单一点的:Private Sub Form_Resize()    If Width > 5000 Then Width = 5000: Enabled = False
        Enabled = TrueEnd Sub
      

  4.   

    窗口中:这个是什么事件啊    'w = 200: h = 100
        OldWindowProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
        Call SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WndProc)
    End Sub
      

  5.   

    http://expert.csdn.net/Expert/topic/2832/2832408.xml?temp=.8711664