home *** CD-ROM | disk | FTP | other *** search
- VERSION 4.00
- Begin VB.Form frmSysMenu
- Caption = "Change System Menu & Context Menus"
- ClientHeight = 1560
- ClientLeft = 1095
- ClientTop = 1515
- ClientWidth = 5790
- Height = 1965
- Left = 1035
- LinkTopic = "Form1"
- ScaleHeight = 1560
- ScaleWidth = 5790
- Top = 1170
- Width = 5910
- Begin VB.PictureBox picTarget
- Height = 495
- Left = 720
- ScaleHeight = 465
- ScaleWidth = 885
- TabIndex = 3
- Top = 840
- Visible = 0 'False
- Width = 915
- End
- Begin VB.CheckBox chkContext
- Caption = "Replace Context Menu"
- Height = 255
- Left = 2700
- TabIndex = 2
- Top = 960
- Width = 2115
- End
- Begin VB.CommandButton cmdAddSystem
- Caption = "Add To System Menu"
- Height = 495
- Left = 2700
- TabIndex = 1
- Top = 300
- Width = 1995
- End
- Begin VB.TextBox txtMenu
- Height = 315
- Left = 660
- TabIndex = 0
- Text = "NewMenu"
- Top = 360
- Width = 1815
- End
- Begin DwsbcLibDemo.SubClass SubClass1
- Left = 5160
- Top = 780
- _Version = 262144
- _ExtentX = 847
- _ExtentY = 847
- _StockProps = 0
- CtlParam = "frmSysMenu"
- Persist = 0
- RegMessage1 = ""
- RegMessage2 = ""
- RegMessage3 = ""
- RegMessage4 = ""
- RegMessage5 = ""
- Type = 0
- Messages = "SYSMENU.frx":0000
- End
- Attribute VB_Name = "frmSysMenu"
- Attribute VB_Creatable = False
- Attribute VB_Exposed = False
- Option Explicit
- ' Copyright
- 1997 by Desaware Inc. All Rights Reserved.
- Dim CurrentID&
- Dim NewContextMenu&
- Const WM_CONTEXTMENU = &H7B
- Const WM_SYSCOMMAND = &H112
- Const WM_MENUBASE = &H2000
- Const WM_COMMAND = &H111
- Const SCOFFSET = 2000
- Private Sub cmdAddSystem_Click()
- Dim sm&, di&
- If Len(txtMenu.Text) = 0 Then
- MsgBox "Must specify menu text"
- Exit Sub
- End If
- sm& = GetSystemMenu(hwnd, False)
- di& = AppendMenu(sm, MF_STRING, SCOFFSET + CurrentID, txtMenu.Text)
- CurrentID = CurrentID + 1
- End Sub
- Private Sub Form_Load()
- Dim di&
- NewContextMenu = CreatePopupMenu()
- di = AppendMenu(NewContextMenu, MF_STRING, WM_MENUBASE, "Entry 1")
- di = AppendMenu(NewContextMenu, MF_STRING, WM_MENUBASE + 1, "Entry 2")
- di = AppendMenu(NewContextMenu, MF_STRING, WM_MENUBASE + 2, "Entry 3")
- SubClass1.AddHwnd = txtMenu.hwnd
- SubClass1.AddHwnd = picTarget.hwnd
- End Sub
- Private Sub Form_Unload(Cancel As Integer)
- If NewContextMenu Then Call DestroyMenu(NewContextMenu)
- End Sub
- ' This event is triggered for every WM_SYSCOMMAND message
- Private Sub SubClass1_WndMessage(hwnd As Long, msg As Long, wp As Long, lp As Long, retval As Long, nodef As Integer)
- Dim sm&, di&
- Dim usestring$
- Dim usex%, usey%
- Select Case msg
- Case WM_COMMAND
- ' We only care about WM_COMMAND messages to picture control
- If hwnd <> picTarget.hwnd Then Exit Sub
- Call agDWORDto2Integers(wp, usex, usey)
- MsgBox "Received command # " & Hex$(usex)
- nodef = True
- Case WM_SYSCOMMAND
- ' If it's not one of the ones we added, just exit
- If wp < SCOFFSET Or wp >= (SCOFFSET + CurrentID) Then Exit Sub
- ' Get the text for this menu entry
- sm& = GetSystemMenu(hwnd, False)
- usestring$ = String$(128, 0)
- di = GetMenuString(sm, wp, usestring, 127, MF_BYCOMMAND)
- MsgBox Left$(usestring, di), vbOKOnly, "System Menu Clicked is:"
- nodef = True
- Case WM_CONTEXTMENU
- ' Only trap the context menu if requested
- If chkContext.value = 0 Then Exit Sub
- ' Get the location of the mouse click
- Call agDWORDto2Integers(lp, usex, usey)
- Call TrackPopupMenuBynum(NewContextMenu, TPM_LEFTALIGN Or TPM_RIGHTBUTTON, usex, usey, 0, picTarget.hwnd, 0)
- nodef = True ' Don't let control get the message!
- End Select
- End Sub
-