Menüpunkt samt Pfad zum Untermenü ermitteln
Verfasst: 28.01.2005 22:01
Weil mich dieses Stück Code eine ganze Menge Nerven gekostet hat poste ich es mal hier:
- es wird der Menüpunkt unter der Maus ermittelt
- es wird der Handle zur Menüstruktur ermittelt
- anschliessend wird vom Handle zur Menüstruktur aus rekursiv gesucht,
bis der Menüpunkt samt Pfad ermittelt wurde
Nach dem starten des Programms muss natürlich die Maus über einen
Menüpunkt gefahren werden (z.B. einfach das Menü vom Editor öffnen)
PS: Vielleicht geht das auch rückwärts ohne Suche, ich habe aber keine Möglichkeit gefunden das darüberliegende Menühandle zu ermitteln.
- es wird der Menüpunkt unter der Maus ermittelt
- es wird der Handle zur Menüstruktur ermittelt
- anschliessend wird vom Handle zur Menüstruktur aus rekursiv gesucht,
bis der Menüpunkt samt Pfad ermittelt wurde
Nach dem starten des Programms muss natürlich die Maus über einen
Menüpunkt gefahren werden (z.B. einfach das Menü vom Editor öffnen)
Code: Alles auswählen
lpPoint.Point
#MN_GETHMENU = $1E1
NewList lstSearchSubmenu.s()
Procedure SearchSubmenu(hmenu, hcurrmenu.l)
count = GetMenuItemCount_(hmenu)
For mnucount=0 To count -1
hsubmenu = GetSubmenu_(hmenu, mnucount)
If hsubmenu <> 0
If hsubmenu = hcurrmenu.l
mnuString.s = Space(255)
GetMenuString_(hmenu, mnucount, @mnuString, Len(mnuString), #MF_BYPOSITION)
InsertElement(lstSearchSubmenu.s())
lstSearchSubmenu.s() = mnuString
ProcedureReturn #True
Else
erg = SearchSubmenu(hsubmenu, hcurrmenu.l)
If erg = #True
mnuString.s = Space(255)
GetMenuString_(hmenu, mnucount, @mnuString, Len(mnuString), #MF_BYPOSITION)
InsertElement(lstSearchSubmenu.s())
lstSearchSubmenu.s() = mnuString
ProcedureReturn erg
EndIf
EndIf
EndIf
Next
EndProcedure
While 1=1
GetCursorPos_(lpPoint)
hwnd = WindowFromPoint_(lpPoint\X, lpPoint\Y)
Submenucount = 0
phwnd = GetParent_(hwnd) ;Fenster-Handle
hmenu = GetMenu_(phwnd)
hcurrmenu.l = SendMessage_(hwnd, #MN_GETHMENU, 0,0)
menuPos = MenuItemFromPoint_(hwnd, hcurrmenu.l, lpPoint\X, lpPoint\Y)
If oldmenuPos <> menuPos
SearchSubmenu(hmenu, hcurrmenu.l)
mnuString.s = Space(255)
GetMenuString_(hcurrmenu.l, menuPos, @mnuString, Len(mnuString), #MF_BYPOSITION)
LastElement(lstSearchSubmenu.s())
AddElement(lstSearchSubmenu.s())
lstSearchSubmenu.s() = mnuString
Debug "------------"
ForEach lstSearchSubmenu.s()
Debug lstSearchSubmenu.s()
Next
ClearList(lstSearchSubmenu.s())
oldmenuPos = menuPos
EndIf
Submenucount = 0
Wend