'[b][color=red]Inside a module[/color][/b]
Option Explicit
Private OriginalWindowProc As Long
Public Const MF_STRING = &H0&
Public Const MF_ENABLED = &H0&
Public Const MF_POPUP As Long = &H10&
Public Const MF_SEPARATOR As Long = &H800&
'
Public Const IDM_MYMENUITEM = 2003
Public Const WM_SYSCOMMAND = &H112
Public Const GWL_WNDPROC = (-4)
Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert 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 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
'
Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long
Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Declare Function CreatePopupMenu Lib "user32" () As Long
Public lNewPopupMenu As Long
Public Sub AddToSystemMenu(ByVal hwnd As Long)
Dim hSystemMenu As Long
' Get the system menu's handle.
hSystemMenu = GetSystemMenu(hwnd, False)
'Get the form's File PopUp menu
lNewPopupMenu = GetSubMenu(GetMenu(hwnd), 0)
'-------------------------------------------
AppendMenu hSystemMenu, MF_SEPARATOR, ByVal 0&, ByVal 0& 'A separetor
AppendMenu hSystemMenu, MF_POPUP, lNewPopupMenu, "File" 'File
'-------------------------------------------
' Tell Windows to call MyMenuProc when a system
' menu command is selected.
OriginalWindowProc = SetWindowLong(hwnd, GWL_WNDPROC, _
AddressOf MyMenuProc)
End Sub
Public Function MyMenuProc(ByVal hwnd As Long, ByVal msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) As Long
' If the custom menu item was selected display a message.
If msg = WM_SYSCOMMAND Then 'System menu clicked
Select Case wParam
Case GetMenuItemID(lNewPopupMenu, 0): '1st item of the menu - New
Form1.mnuNew_Click
Case GetMenuItemID(lNewPopupMenu, 1): '2nd item of the menu - Open
Form1.mnuOpen_Click
Case GetMenuItemID(lNewPopupMenu, 2): '3rd item of the menu - Close
Form1.mnuClose_Click
Exit Function
End Select
End If
' Otherwise pass the command on for normal processing.
MyMenuProc = CallWindowProc(OriginalWindowProc, hwnd, msg, _
wParam, lParam)
End Function