在普通Form中可以通过窗体的ControlBox,MaxButton,MinButton三个属性来设置窗体右上角的最大化,最小化和关闭的功能,但是MDI Form窗体却没有这三个属性,请各位高手指点下怎么样控制MDI窗体的右上角的最大化,最小化和关闭的功能,谢谢谢谢!!!

解决方案 »

  1.   


        mdi窗口没有这几个按钮吗?
      

  2.   

    下面是处理“关闭”按钮的,别的再找一下API试一下Private Declare Function GetSystemMenu Lib "User32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function RemoveMenu Lib "User32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    Private Declare Function DrawMenuBar Lib "User32" (ByVal hwnd As Long) As Long
    Private Declare Function GetMenuItemCount Lib "User32" (ByVal hMenu As Long) As Long
    Private Const MF_BYPOSITION = &H400&
    Private Const MF_DISABLED = &H2&Private Sub DisableX(Frm As Form)
    Dim hMenu As Long, nCount As Long
    hMenu = GetSystemMenu(Frm.hwnd, 0)
    nCount = GetMenuItemCount(hMenu)
    Call RemoveMenu(hMenu, nCount - 1, MF_DISABLED Or MF_BYPOSITION)
    DrawMenuBar Frm.hwnd
    End SubPrivate Sub MDIForm_Load()
    Call DisableX(Me)
    End Sub
      

  3.   

    有个一劳永逸的做法,将MDIForm的标题栏去掉,然后用图片背景来代替,这样三个按钮的状态就很好控制了方法:
    Private  Declare  Function  GetWindowLong  Lib  "USER32"  Alias  "GetWindowLongA"  (ByVal  hwnd  As  Long,  ByVal  nIndex  As  Long)  As  Long  
    Private  Declare  Function  SetWindowLong  Lib  "USER32"  Alias  "SetWindowLongA"  (ByVal  hwnd  As  Long,  ByVal  nIndex  As  Long,  ByValdwNewLong  As  Long)  As  Long  
     
    Private  Const  GWL_STYLE  =  (-16)  
    Private  Const  WS_CAPTION  =  &HC00000  
    Private  Const  WS_SYSMENU  =  &H80000  
     
    '以下代码加于窗口初始化中      
     '用于使窗口标题栏隐藏  
           Dim  lStyle  As  Long  
           lStyle  =  GetWindowLong(Me.hwnd,  GWL_STYLE)  
           lStyle  =  lStyle  Xor  WS_CAPTION  
           Call  SetWindowLong(Me.hwnd,  GWL_STYLE,  lStyle)
      

  4.   

    续: sysmaster(为什么我还不懂)下面是处理“关闭”按钮的,别的再找一下API试一下Private Declare Function GetSystemMenu Lib "User32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function RemoveMenu Lib "User32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    Private Declare Function DrawMenuBar Lib "User32" (ByVal hwnd As Long) As Long
    Private Declare Function GetMenuItemCount Lib "User32" (ByVal hMenu As Long) As Long
    Private Const MF_BYPOSITION = &H400&
    Private Const MF_DISABLED = &H2&Private Sub DisableX(Frm As Form)
    Dim hMenu As Long, nCount As Long
    hMenu = GetSystemMenu(Frm.hwnd, 0)
    nCount = GetMenuItemCount(hMenu)
    Call RemoveMenu(hMenu, nCount - 1, MF_DISABLED Or MF_BYPOSITION)'这里有一个nCount-1,你再把nCount-1改为nCount-2,nCount-3,nCount-4.....试试DrawMenuBar Frm.hwnd
    End SubPrivate Sub MDIForm_Load()
    Call DisableX(Me)
    End Sub
      

  5.   

    谢谢,谢谢各位高手的指点,真的感谢CSDN,尤其感谢你们这些高手的热心与帮助!!!:)
      

  6.   

    请问还能告诉我处理"最大化"和"最小化"按钮的方法吗?谢谢!
    PS: to 老加班的人,我把nCount-1改为nCount-2,nCount-3,nCount-4后并没有发现有什么的不同啊,麻烦你能不能再指教一下!
      

  7.   

    不好意思,只有当取ncount-1的时候才能使关闭按钮失效!取其他的值没什么变化啊