form表单的问题
一个form中我允许有最小化和最大化按钮,但是我要禁掉关闭按钮,就是表单右上角的那个,请问该怎么做呀 问题点数:20、回复次数:8Top
1 楼nebular(星云)回复于 2002-04-15 11:42:44 得分 5
最简单的方法,把窗体的CONTROLBOX设为FALSETop
2 楼water_j(随心所欲)回复于 2002-04-15 11:45:29 得分 2
楼上说的没错!Top
3 楼jamsband(东子)回复于 2002-04-15 11:47:20 得分 0
不行,要有那个最小化和最大化的呀,就是不要关闭的那个,还有其他办法吗Top
4 楼zhongminsheng(小生)回复于 2002-04-15 11:52:35 得分 1
Private Sub Form_Unload(Cancel As Integer)
cancel=true
End SubTop
5 楼nebular(星云)回复于 2002-04-15 11:54:06 得分 6
这样就要使用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
其中GetSystemMenu参数如下表:
hwnd Long, 系统菜单所在窗口的句柄
bRevert Long,如设为TRUE,表示恢复原始的系统菜单
返回值 Long,如执行成功,返回系统菜单的句柄;零意味着出错。如bRevert设为TRUE,也会返回零(简单的恢复原始的系统菜单)
而RemoveMenu参数如下表:
hMenu Long,菜单的句柄
nPosition Long,欲改变的菜单条目的标识符。如在wFlags参数中指定了MF_BYCOMMAND,这个参数就代表欲改变的菜单条目的命令ID。如设置的是MF_BYPOSITION,这个参数就代表菜单条目在菜单中的位置(第一个条目的位置为零)
wFlags Long,常数MF_BYCOMMAND=&H0&或MF_BYPOSITION=&H400&,取决于nPosition参数
返回值 Long,非零表示成功,零表示失败。
使用方法如下
MyMenu = GetSystemMenu(Me.hwnd,0)
RemoveMenu MyMenu, &HF060, MF_BYCOMMANDTop
6 楼eaglezhao(笨小子)回复于 2002-04-15 11:54:11 得分 6
实际上右上角的三个按钮和系统菜单里(就是坐上角点击图标出来得菜单)的菜单是一致的,你可以使用Api函数将菜单中的关闭设置为不可用即可,代码如下:
Const xMenuID = 10&
Private Sub Command1_Click()
Dim hMenu As Long, MII As MENUITEMINFO
hMenu = GetSystemMenu(Me.hWnd, 0)
MII.cbSize = Len(MII)
MII.dwTypeData = String(80, 0)
MII.cch = Len(MII.dwTypeData)
MII.fMask = MIIM_STATE
MII.wID = SC_CLOSE
GetMenuItemInfo hMenu, SC_CLOSE, False, MII
MII.wID = xMenuID
MII.fMask = MIIM_ID
SetMenuItemInfo hMenu, SC_CLOSE, False, MII
MII.fState = MII.fState Or MFS_GRAYED
MII.fMask = MIIM_STATE
SetMenuItemInfo hMenu, MII.wID, False, MII
SendMessage Me.hWnd, WM_NCACTIVATE, True, ByVal 0&
End Sub
所用到的API声明为:
Public Const WM_NCACTIVATE = &H86
Public Const SC_CLOSE = &HF060&
Public Const MIIM_STATE = &H1&
Public Const MIIM_ID = &H2&
Public Const MFS_GRAYED = &H3&
Public Const MFS_CHECKED = &H8&
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 Long
End Type
Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long
Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal b As Boolean, lpMenuItemInfo As MENUITEMINFO) As Long
Declare Function SetMenuItemInfo Lib "user32" Alias "SetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, lpcMenuItemInfo As MENUITEMINFO) 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 Long
Top
7 楼jamsband(东子)回复于 2002-04-15 11:55:50 得分 0
可不可以帮我实现这个功能,不要给我写这么长呀,我看不懂~_~,嘻嘻,多谢Top
8 楼jamsband(东子)回复于 2002-04-15 13:03:57 得分 0
结束吧,谢谢各位Top




