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
    ' Get handle to our form's system menu
    ' (Restore, Maximize, Move, close etc.)
    hSysMenu = GetSystemMenu(Me.hwnd, False)    If hSysMenu Then
        ' Get System menu's menu count
        nCnt = GetMenuItemCount(hSysMenu)
        If nCnt Then
            ' Menu count is based on 0 (0, 1, 2, 3...)
            RemoveMenu hSysMenu, nCnt - 1, MF_BYPOSITION Or MF_REMOVE
            RemoveMenu hSysMenu, nCnt - 2, MF_BYPOSITION Or MF_REMOVE ' Remove the seperator
            RemoveMenu hSysMenu, nCnt - 3, MF_BYPOSITION Or MF_REMOVE
            
            DrawMenuBar Me.hwnd
            ' Force caption bar's refresh. Disabling X button
            Me.Caption = "Try to close me!"
        End If
    End If
End Sub

解决方案 »

  1.   

    不允许回复为空!!不允许有 gz、up!!!!来点创意吧!!!
      

  2.   

    用getwindowslong,setwindowslong,setwindowspos
    先用getwindowslong 获取窗口样式,然后用and not运算去掉最大化窗口,然后用setwindowslong把样式指定给窗口,然后用setwindowspos发送消息刷新!
      

  3.   

    就用API函数GETSYSTEMMENU,REMOVEMENU
    绝对可以
    dim  hmenu as long
    hmenu =getsystemmenu(me.hwnd)
    removemenu hmenu,4,MF_BYPOSITION,....
    我以前做过
    把一个MIDI窗口的最大化按纽去掉了
    那个按纽还可以按,但不起作用了
      

  4.   

    那么简单的问题都要这么复杂的用API来解决?Form1.MaxButton=False
      

  5.   

    问题是这个form就不是VB的FORM,不用有什么高招?
      

  6.   

    Bardo(巴顿) :
    问题是这个form就不是VB的FORM,不用有什么高招?  
    如果不是vb的Form的话,给你提供一个思路:
    先找到这个窗体的句柄,然后用uguess(uguess)的方法灰化这些按钮。
    但是如果这个窗口没有系统菜单,可能会出错。
      

  7.   

    uguess(uguess)的方法无法 灰化还原这些按钮!!