如何把MDI窗体上的关闭,最小化,最大化这几个按纽去掉呢

解决方案 »

  1.   

    它既然是mdi窗体,这几个按钮可以去掉么?
    我认为不行.
    :)不知道是不是真的不行.
      

  2.   

    用api
    GetSystemMenu,RemoveMenu等东东
      

  3.   

    '关闭窗口的所有菜单功能
    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
    Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    Const MF_BYPOSITION = &H400&
    Const MF_REMOVE = &H1000&
    Private Sub Form_Load()
        Dim hSysMenu As Long, nCnt As Long, i As Long
        hSysMenu = GetSystemMenu(Me.hwnd, False)
        If hSysMenu Then
            nCnt = GetMenuItemCount(hSysMenu)
            For i = nCnt To 0 Step -1
                RemoveMenu hSysMenu, i, MF_BYPOSITION Or MF_REMOVE  ' Remove the seperator
                DrawMenuBar Me.hwnd
                Me.Caption = "Try to close me!"
            Next
        End If
    End Sub
      

  4.   

    MDI 和普通窗体不同. 没有办法完全去掉或者灰化,但是可以使其失去作用
    以下是使 MDI 主窗体"窗口化"按钮失效的代码,你可以参照一下来控制其它的按钮
    ==================================
    'MDIForm1
    Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
    Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    Const MF_BYPOSITION = &H400&
    Const MF_REMOVE = &H1000&Private Sub MDIForm_Load()
        Me.WindowState = 2
        Dim hSysMenu As Long, nCnt As Long
        hSysMenu = GetSystemMenu(Me.hwnd, False)
        If hSysMenu Then
            nCnt = GetMenuItemCount(hSysMenu)
            If nCnt Then
                RemoveMenu hSysMenu, 0, MF_BYPOSITION Or MF_REMOVE
                DrawMenuBar Me.hwnd
            End If
        End If
        
        prevWndProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
        SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf WndProc
    End SubPrivate Sub MDIForm_Unload(Cancel As Integer)
        SetWindowLong Me.hwnd, GWL_WNDPROC, prevWndProc
    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 WM_NCLBUTTONDBLCLK = &HA3Public 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_NCLBUTTONDBLCLK Then
            Exit Function
        End If
        WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
        Exit Function
    ShowErr:
        WndProc = CallWindowProc(prevWndProc, hwnd, Msg, wParam, lParam)
        Exit Function
    End Function
      

  5.   

    用API,当心程序不能退出噢!!下面是例子:Private Sub Command2_Click()    RemoveMenu GetSystemMenu(hwnd, 0), SC_CLOSE, MF_REMOVE    RemoveMenu GetSystemMenu(hwnd, 0), SC_MAXIMIZE, MF_REMOVE    RemoveMenu GetSystemMenu(hwnd, 0), SC_MINIMIZE, MF_REMOVEEnd SubPrivate Sub Command3_Click()    EndEnd Sub模块:Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Const WS_EX_TOOLWINDOW = &H80&Public Const GWL_EXSTYLE = (-20)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) As LongPublic Const SWP_FRAMECHANGED = &H20Public Const SWP_NOMOVE = &H2Public Const SWP_NOZORDER = &H4Public Const SWP_NOSIZE = &H1Public Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As LongPublic Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As LongPublic Const MF_BYPOSITION = &H400&Public Const MF_REMOVE = &H1000&Public Const SC_CLOSE = &HF060Public Const SC_MAXIMIZE = &HF030Public Const SC_MINIMIZE = &HF020
     
     
    Top 
     
     回复人: jackwang2002(jack) ( ) 信誉:100  2002-2-25 13:25:00 得分:0  
     
     
     我试了,用楼上的方法操作mdiform,可是还是不行,只对关闭起作用
     
     
    Top 
     
     回复人: pengnick(pengnick) ( ) 信誉:100  2002-3-6 20:28:56 得分:0  
     
     
     关注
     
     
    Top 
     
     回复人: zyl910(高三学习忙,在线时间:星期日20:00) ( ) 信誉:165  2002-3-6 20:29:22 得分:0  
     
     
     试一试:Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Const WS_MINIMIZEBOX = &H20000Private Const WS_MAXIMIZEBOX = &H10000Private Const GWL_STYLE = (-16)Private Sub Form_Load()    Dim TempLng As Long        TempLng = GetWindowLong(Me.hwnd, GWL_STYLE)    TempLng = TempLng And Not WS_MINIMIZEBOX '最小化    TempLng = TempLng And Not WS_MAXIMIZEBOX '最大化    SetWindowLong Me.hwnd, GWL_STYLE, TempLng    End Sub
     
     
    Top 
     
     回复人: daryl715(海军少校) ( ) 信誉:100  2002-3-6 20:40:46 得分:0  
     
     
     灰化关闭按钮你满意吗?form:Option ExplicitPrivate m_blnCloseEnabled As BooleanPrivate Sub Form_Load()    m_blnCloseEnabled = True    Command1.Caption = "Disable"End SubPrivate Sub Command1_Click()    m_blnCloseEnabled = Not m_blnCloseEnabled    EnableCloseButton Me.hWnd, m_blnCloseEnabled        If m_blnCloseEnabled Then        Command1.Caption = "Disable"    Else        Command1.Caption = "Enable"    End IfEnd Sub通用模块:Option ExplicitPrivate Const SC_CLOSE As Long = &HF060&Private Const MIIM_STATE As Long = &H1&Private Const MIIM_ID As Long = &H2&Private Const MFS_GRAYED As Long = &H3&Private Const WM_NCACTIVATE As Long = &H86Private Type MENUITEMINFO    cbSize As Long    fMask As Long    fType As Long    fState As Long    wID As Long    hSubMenu As Long    hbmpChecked As Long    hbmpUnchecked As Long    dwItemData As Long    dwTypeData As String    cch As LongEnd TypePrivate Declare Function GetSystemMenu Lib "user32" ( _    ByVal hWnd As Long, ByVal bRevert As Long) As LongPrivate Declare Function GetMenuItemInfo Lib "user32" Alias _    "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, _    ByVal b As Boolean, lpMenuItemInfo As MENUITEMINFO) As LongPrivate Declare Function SetMenuItemInfo Lib "user32" Alias _    "SetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, _    ByVal bool As Boolean, lpcMenuItemInfo As MENUITEMINFO) As LongPrivate Declare Function SendMessage Lib "user32" Alias _    "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, _    ByVal wParam As Long, lParam As Any) As LongPrivate Declare Function IsWindow Lib "user32" _    (ByVal hWnd As Long) As LongPublic Function EnableCloseButton(ByVal hWnd As Long, Enable As Boolean) _                                                                As Integer    Const xSC_CLOSE As Long = -10        EnableCloseButton = -1    If IsWindow(hWnd) = 0 Then Exit Function            Dim hMenu As Long    hMenu = GetSystemMenu(hWnd, 0)            Dim MII As MENUITEMINFO    MII.cbSize = Len(MII)    MII.dwTypeData = String(80, 0)    MII.cch = Len(MII.dwTypeData)    MII.fMask = MIIM_STATE        If Enable Then        MII.wID = xSC_CLOSE    Else        MII.wID = SC_CLOSE    End If        EnableCloseButton = -0    If GetMenuItemInfo(hMenu, MII.wID, False, MII) = 0 Then Exit Function            Dim lngMenuID As Long    lngMenuID = MII.wID        If Enable Then        MII.wID = SC_CLOSE    Else        MII.wID = xSC_CLOSE    End If        MII.fMask = MIIM_ID    EnableCloseButton = -2    If SetMenuItemInfo(hMenu, lngMenuID, False, MII) = 0 Then Exit Function            If Enable Then        MII.fState = (MII.fState Or MFS_GRAYED)        MII.fState = MII.fState - MFS_GRAYED    Else        MII.fState = (MII.fState Or MFS_GRAYED)    End If        MII.fMask = MIIM_STATE    EnableCloseButton = -3    If SetMenuItemInfo(hMenu, MII.wID, False, MII) = 0 Then Exit Function            SendMessage hWnd, WM_NCACTIVATE, True, 0        EnableCloseButton = 0    End Function 
     
      

  6.   

    用imagin控件作成一个窗体背景的图片,就可以了!不用那么麻烦!拿分来!