(仅供参考)
向系统菜单中添加新项,并且执行对应事件,在窗体任意位置弹出系统菜单,并且执行事件 ''''窗体 Option Explicit
Private Sub Form_Load() On Error Resume Next lhSysMenu = GetSystemMenu(hwnd, 0&) lRet = AppendMenu(lhSysMenu, MF_SEPARATOR, 0&, vbNullString) lRet = AppendMenu(lhSysMenu, MF_STRING, IDM_ABOUT, "About...") Show ProcOld = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf WindowProc) End Sub
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim r As RECT Dim p As POINTAPI If Button = vbRightButton Then GetCursorPos p TrackPopupMenu lhSysMenu, 0, p.X, p.Y, 0, Me.hwnd, r End If End Sub
Private Sub Form_Unload(Cancel As Integer) SetWindowLong hwnd, GWL_WNDPROC, ProcOld End Sub
''''------------------------------------------------------------- ''''模块 Option Explicit Public Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal X As Long, ByVal Y As Long, ByVal nReserved As Long, ByVal hwnd As Long, lprc As RECT) As Long Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Public 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 Public Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As String) As Long Public Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long Public Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Public Type POINTAPI X As Long Y As Long End Type Public ProcOld As Long Public Const TPM_LEFTALIGN = &H0& Public Const WM_SYSCOMMAND = &H112 Public Const MF_SEPARATOR = &H800& Public Const MF_STRING = &H0& Public Const GWL_WNDPROC = (-4) Public Const IDM_ABOUT As Long = 1010 Public Const WM_COMMAND = &H111 Public lhSysMenu As Long, lRet As Long
Public Function WindowProc(ByVal hwnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Select Case iMsg Case WM_SYSCOMMAND If wParam = IDM_ABOUT Then MsgBox "VB Web Append to System Menu Example", vbInformation, "About" Exit Function End If Case WM_COMMAND If wParam = IDM_ABOUT Then MsgBox "VB Web Append to System Menu Example", vbInformation, "About" Exit Function Else CallWindowProc ProcOld, hwnd, WM_SYSCOMMAND, wParam, lParam WindowProc = 0 Exit Function End If End Select WindowProc = CallWindowProc(ProcOld, hwnd, iMsg, wParam, lParam) End Function
没有相关教程
|