下面是处理“关闭”按钮的,别的再找一下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
有个一劳永逸的做法,将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
'以下代码加于窗口初始化中 '用于使窗口标题栏隐藏 Dim lStyle As Long lStyle = GetWindowLong(Me.hwnd, GWL_STYLE) lStyle = lStyle Xor WS_CAPTION Call SetWindowLong(Me.hwnd, GWL_STYLE, lStyle)
续: 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
谢谢,谢谢各位高手的指点,真的感谢CSDN,尤其感谢你们这些高手的热心与帮助!!!:)
请问还能告诉我处理"最大化"和"最小化"按钮的方法吗?谢谢! PS: to 老加班的人,我把nCount-1改为nCount-2,nCount-3,nCount-4后并没有发现有什么的不同啊,麻烦你能不能再指教一下!
mdi窗口没有这几个按钮吗?
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
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)
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
PS: to 老加班的人,我把nCount-1改为nCount-2,nCount-3,nCount-4后并没有发现有什么的不同啊,麻烦你能不能再指教一下!