1、为什么我的MDIForm子窗体在程序运行时会自动变大呢,不是我设计时的大小,只有把子窗体的BorderStyle设为Fixed类型的才行;
2、BorderStyle里面的Fixed Single和Fixed dialog有什么不同?
3、我想把父窗体的Resize限定在一个范围内,当缩小到某个值时就不能再缩了,(是不能再缩了,就是说到了某个值之后,就不能再调整,而不是缩小之后在返回原来的大小)谢谢。

解决方案 »

  1.   

    1、将窗体的WindowState 设置为0-Normal
    2、FixedSingle 固定单边框。可以包含控制菜单框,标题栏,“最大化”按钮,和“最小化”按钮。只有使用最大化和最小化按钮才能改变大小。 Fixed dialog 固定对话框。可以包含控制菜单框和标题栏,不能包含最大化和最小化按钮,不能改变尺寸。
    3、
    Private Sub Form_Resize()
        If Form1.Height < 5000 Then Form1.Height = 5000
        If Form1.Width < 5000 Then Form1.Width = 5000
    End Sub
      

  2.   

    你将窗体的WindowState设置为2-Maximized了吧?把它设为0-Normal
      

  3.   

    关于第一个问题,是运行时变大一点而不是最大化,比如我设计时的是9600*7200,运行时却变成了12000*7200第二个问题已经解决第三个问题是到了某个值后就不能再用鼠标去拖,即再也拖不动了,而不是缩小之后再弹回设定的大小,具体的请大家试试调整一下Foxmail。谢谢。
      

  4.   

    1。在Form_load()下写:
    Me.Height = 9600
    Me.Width = 7200
      

  5.   

    第三个问题:
    窗体代码:
    Option Explicit  
    Private Const GWL_WNDPROC As Long = (-4&)    
    Private Declare Function SetWindowLong& Lib "user32" Alias "SetWindowLongA" (ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)
                                                                  
    Private Sub Form_Load()
      procOld = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)                            
    End Sub
    Private Sub Form_Unload(Cancel As Integer)
      Call SetWindowLong(hWnd, GWL_WNDPROC, procOld)  
    End Sub模块代码:Option Explicit
      Type POINTAPI
        x As Long
        y As Long
      End Type  
      Public Const WM_GETMINMAXINFO As Long = &H24  
      Type MINMAXINFO
        ptReserved As POINTAPI
        ptMaxSize As POINTAPI
        ptMaxPosition As POINTAPI
        ptMinTrackSize As POINTAPI
        ptMaxTrackSize As POINTAPI
      End Type  
      Public procOld As Long  
      Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, ByVal cBytes&)
                                                                                             
      Public Declare Function CallWindowProc& Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc&, ByVal hWnd&, ByVal Msg&, ByVal wParam&, ByVal lParam&)
        
    Public 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
          Dim nWidthPixels&, nHeightPixels&
          nWidthPixels = Screen.Width \ Screen.TwipsPerPixelX
          nHeightPixels = Screen.Height \ Screen.TwipsPerPixelY
          CopyMemory udtMINMAXINFO, ByVal lParam, 40&
          With udtMINMAXINFO
            .ptMaxSize.x = nWidthPixels - (nWidthPixels \ 4)
            .ptMaxSize.y = nHeightPixels - (nHeightPixels \ 4)
            .ptMaxPosition.x = nWidthPixels \ 8
            .ptMaxPosition.y = nHeightPixels \ 8
            .ptMaxTrackSize.x = .ptMaxSize.x
            .ptMaxTrackSize.y = .ptMaxSize.y
            .ptMinTrackSize.x = nWidthPixels \ 4
            .ptMinTrackSize.y = nHeightPixels \ 4
          End With
          CopyMemory ByVal lParam, udtMINMAXINFO, 40&
          WindowProc = False
          Exit Function
      End Select
      WindowProc = CallWindowProc(procOld, hWnd, iMsg, wParam, lParam)
    End Function