我要响应在窗体的控制栏(controlsbox)的单击事件,如何写?
解决方案 »
- VB做C\S居然被人冷嘲暗讽!
- 征婚启事——非诚勿扰(有照片)
- ado 连接access数据库
- 如何得到TextBox中文本的行數?
- 关于报表打印纸张以及打印方向设置的问题
- 关于加载了sstab控件的响应窗体KeyDown事件的问题?
- 请问如何实现网络打卡(软件是B/S模式的)
- 关于VB中Combo控件获得SQL数据库中某一列全部内容
- 请教: VB6中调用DLL函数, 如何写Declare.
- 提问3:为何我的程序有时会不经过Form_unload事件就退出?
- 用VB遍了个记事本,有个设置字体的功能,运行时老提示要求安装字体,怎么回事?
- 水晶报表高手请进来,关于水晶报表打印问题..高分求问(解决就截贴).....
插入你的菜单到系统菜单,然后增加响应
If Me.WindowState Then Me.Hide
Me.WindowState = 0
End Sub
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetSubMenu Lib "user32" _
(ByVal hMenu As Long, _
ByVal nPos As Long _
) As Long
Private Declare Function GetMenuItemID Lib "user32" _
(ByVal hMenu As Long, _
ByVal nPos As Long _
) As Long
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 RemoveMenu Lib "user32" _
(ByVal hMenu As Long, _
ByVal nPosition As Long, _
ByVal wFlags As Long _
) As Long
Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" _
(ByVal hMenu As Long, _
ByVal nPosition As Long, _
ByVal wFlags As Long, _
ByVal wIDNewItem As Long, _
ByVal lpString As Any) _
As Long
Private Declare Function InsertMenu Lib "user32" Alias "InsertMenuA" _
(ByVal hMenu As Long, _
ByVal nPosition As Long, _
ByVal wFlags As Long, _
ByVal wIDNewItem As Long, _
ByVal lpNewItem As Any _
) As Long
Private Declare Function GetMenuString Lib "user32" Alias "GetMenuStringA" _
(ByVal hMenu As Long, _
ByVal wIDItem As Long, _
ByVal lpString As String, _
ByVal nMaxCount As Long, _
ByVal wFlag As Long _
) As Long
Private Const MF_BYCOMMAND = &H0&
Private Const MF_BYPOSITION = &H400&
Private Const MF_CHANGE = &H80&
Private Const MF_REMOVE = &H1000&
'子过程
'除去系统菜单中旧的菜单项
Private Sub RemoveOldMenu()
Dim hSysMenu As Long
Dim nCnt As Long
hSysMenu = GetSystemMenu(Me.hwnd, False)
If hSysMenu Then
' 取得系统菜单中的数量
nCnt = GetMenuItemCount(hSysMenu)
If nCnt Then
Dim i As Integer
' 编号 (0, 1, 2, 3...)
For i = nCnt - 2 To 0 Step -1 '第一项不除去
RemoveMenu hSysMenu, i, MF_BYPOSITION Or MF_REMOVE
Next i
End If
End If
End Sub
'插入新的菜单项
Private Sub InsertMyMenu()
Dim hSysMenu As Long
Dim hMenu As Long
Dim hSubMenu As Long
Dim hMenuID As Long
Dim sMenuString As String
Dim nCnt As Integer
sMenuString = Space(20)
hSysMenu = GetSystemMenu(Me.hwnd, False) '获得系统菜单句柄
hMenu = GetMenu(Me.hwnd) '获得窗体菜单句柄
hSubMenu = GetSubMenu(hMenu, 1) '获得子菜单句柄
For nCnt = 0 To 3
hMenuID = GetMenuItemID(hSubMenu, nCnt) '获得菜单ID号
GetMenuString hSubMenu, nCnt, sMenuString, Len(sMenuString), MF_BYPOSITION '获得菜单的标题
If nCnt = 0 Then
'第一项菜单项没有去掉,用修改函数
ModifyMenu hSysMenu, nCnt, MF_BYPOSITION, hMenuID, sMenuString
Else
'其它项用插入函数
'InsertMenu hSysMenu, nCnt, MF_BYPOSITION, hMenuID, sMenuString
InsertMenu hSysMenu, nCnt, MF_BYPOSITION, WM_USER + IDM_test, sMenuString
End If
Next nCnt
End Sub
Private Sub Form_Load()
HookForm Me
Call RemoveOldMenu
Call InsertMyMenu
End Sub
Private Sub mnuExit_Click()
UnHookForm Me
Unload Me
End SubPrivate Sub mnuNew1_Click()
MsgBox "of"
End Sub模块
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private 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
Private Declare Function DefWindowProc Lib "user32" Alias "DefWindowProcA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Const WM_DRAWCLIPBOARD = &H308
Public Const GWL_WNDPROC = (-4)
Public Const WM_SYSCOMMAND = &H112
Public Const WM_USER = &H400
Public Const IDM_test = 1Dim OldProc As Long
Private Function addcallback(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case wMsg
Case WM_SYSCOMMAND
Select Case wParam
Case WM_USER + IDM_test
MsgBox "自定义消息"
Case Else
addcallback = DefWindowProc(hwnd, wMsg, wParam, lParam)
End Select
Exit Function
Case Else
addcallback = CallWindowProc(OldProc, hwnd, wMsg, wParam, lParam)
End Select
End FunctionPublic Sub HookForm(F As Form)
OldProc = SetWindowLong(F.hwnd, GWL_WNDPROC, AddressOf addcallback)
End Sub
Public Sub UnHookForm(F As Form)
SetWindowLong F.hwnd, GWL_WNDPROC, OldProc
End Sub