Hi
Mit dem Api Call AppendMenu können Einträge ins Systemmenü der Form gemacht werden. Über Subclassing werden die Windowsmsg ausgewertet und überprüft ob ein Menüeintrag angewählt wurde.
Option Explicit
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
Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert _
As Long) As Long
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd _
As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
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 Const WM_SYSCOMMAND = &H112
Private Declare Function CreatePopupMenu Lib "user32" () As Long
Private Const MF_STRING = &H0&
Private Const MF_SEPARATOR = &H800&
Private Const MF_MENUBARBREAK = &H20&
Private Const MF_POPUP = &H10&
Private Const MF_MENUBREAK = &H40&
Private Const MF_BYCOMMAND = &H0&
Private Const MF_GRAYED = &H1&
Private Const MF_DISABLED = &H2&
Private Const MF_CHECKED = &H8&
Const MENU_OPEN = 400
Const MENU_SAVE = 401
Const MENU_CHECKED = 402
Const MENU_DISABLED = 403
Const MENU_PRINT = 404
Const MENU_EXIT = 405
Public Const GWL_WNDPROC = (-4)
Public Const IDM_CUSTOM As Long = 1010
Public lProcOld As Long
Public Function SysMenuHandler(ByVal hWnd As Long, ByVal iMsg As Long, ByVal _
wParam As Long, ByVal lParam As Long) As Long
If iMsg = WM_SYSCOMMAND Then
If wParam = MENU_OPEN Then
MsgBox "VB Web About...", vbInformation, "About"
Exit Function
End If
End If
SysMenuHandler = CallWindowProc(lProcOld, hWnd, iMsg, wParam, lParam)
End Function
Public Function SubClass(FormName As Form, sMenu As String)
Dim lhSysMenu As Long, lRet As Long, hSubMenu As Long
hSubMenu = CreatePopupMenu()
lhSysMenu = GetSystemMenu(FormName.hWnd, 0&)
AppendMenu lhSysMenu, MF_SEPARATOR, 0&, vbNullString
AppendMenu hSubMenu, MF_STRING, MENU_OPEN, "Open"
AppendMenu hSubMenu, MF_STRING, MENU_SAVE, "Save"
AppendMenu hSubMenu, MF_STRING Or MF_CHECKED, MENU_CHECKED, "Checked"
AppendMenu hSubMenu, MF_STRING Or MF_GRAYED, MENU_DISABLED, "Disabled"
AppendMenu hSubMenu, MF_STRING, MENU_PRINT, "Print"
AppendMenu hSubMenu, MF_STRING, MENU_EXIT, "Exit"
AppendMenu lhSysMenu, MF_STRING + MF_POPUP, hSubMenu, sMenu
lProcOld = SetWindowLong(FormName.hWnd, GWL_WNDPROC, AddressOf _
SysMenuHandler)
End Function LG
PS: Verwendet den Code doch als Tipp ;) |