请教
MDI子窗体:希望父窗体load的时候它的一个子窗体候最大化,如何去掉该子窗体的最小化和最大化按钮。我在属性里设置完以后,运行时该子窗体不能显示。在线等。

解决方案 »

  1.   

    如何去掉该子窗体的最小化和最大化按钮
    ------------------------------------------这很麻烦
    因为MDI窗口的位于标题栏上的子窗口控制按钮实际上是自绘的菜单解决方法不是没有,但是都不够完美
      

  2.   

    确实不够完美,所以只能“使之无效”:
    =============================
    ''mdiform1:
    Private Sub MDIForm_Load()
        Load Form1
        Form1.Show
    End Sub''form1:
    Private Sub Form_Load()
        Me.WindowState = 2
        
        prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
        SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf WndProc
    End Sub''module1:
    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 Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Declare Function Beep Lib "kernel32" (ByVal dwFreq As Long, ByVal dwDuration As Long) As Long
    Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As LongPublic Const GWL_WNDPROC = (-4)
    Public Const SC_MAXIMIZE = &HF030&
    Public Const SC_SIZE = &HF000
    Public Const SC_CLOSE = &HF060
    Public Const WM_SYSCOMMAND = &H112
    Public Const SC_DEFAULT = &HF160
    Public Const WM_NCLBUTTONDBLCLK = &HA3
    Public Const SC_RESTORE = &HF120&
    Public Const SC_MINIMIZE = &HF020&Public prevWndProc As LongPublic Function WndProc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
    On Error GoTo ShowErr    If Msg = WM_SYSCOMMAND Then
            If wParam = SC_RESTORE Then
                Form1.WindowState = 2
                Exit Function
            ElseIf wParam = SC_MINIMIZE Then
                Form1.WindowState = 2
                Exit Function
            Else
                WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
            End If
        End If
        
        WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
        Exit Function
    ShowErr:
        WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
        Exit Function
    End Function
      

  3.   


    #If Win32 Then
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
    #Else
    Private Declare Function SetWindowLong Lib "User" (ByVal hwnd As Integer, ByVal nIndex As Integer, ByVal dwNewLong As Long) As Long
    Private Declare Function GetWindowLong Lib "User" (ByVal hwnd As Integer, ByVal nIndex As Integer) As Long
    #End IfConst WS_MINIMIZEBOX = &H20000 '最小化
    Const WS_MAXIMIZEBOX = &H10000 '最大化
    Const GWL_STYLE = (-16)'在 MDIForm 的 MDIForm_Load 事件中加入以下程序码Sub MDIForm_Load()
    Dim lWnd As Long
    lWnd = GetWindowLong(Me.hwnd, GWL_STYLE)
    lWnd = lWnd And Not (WS_MINIMIZEBOX) '最小化
    lWnd = lWnd And Not (WS_MAXIMIZEBOX) '最大化
    lWnd = SetWindowLong(Me.hwnd, GWL_STYLE, lWnd)
    End Sub
      

  4.   


    不像其他的 Form 一样,MDIForm 并没有提供 MaxButton 及 MinButton 的属性来让我们移除最大化及最小化的按钮,如果您想移除 MDIForm 的最大化及最小化的按钮,您可以在 MDIForm 中加入以下的程序,但是如果您只想移除其中的一个,则只要将对应的程序码加上注解符号即可。'请在 MDIForm 的声明区中加入以下声明
      

  5.   

    是否因vb版本非不同?我这里vb6.0,sp5这样处理有效的:
    将子窗体的属性minbutton和maxbutton均置为false。在mdi窗_load()中加入
    frm子窗.show   '此时子窗的大小由vb程序默认的大小显示;如在子窗的.load(或.show)中有自己设定的子窗大小代码,此时并不执行)。
      

  6.   

    wxy_xiaoyu(程序员真没劲!) 的方法是对的