Seite 1 von 1

Per Befehl Kontext Menü öffnen (wie bei Rechte Maus) ?!

Verfasst: 30.10.2004 07:18
von nco2k
hi folks,

ich brauche einen befehl, mit welchem ich das kontextmenü öffnen kann.

vielen dank, im voraus!

c ya,
nco2k

Re: Per Befehl Kontext Menü öffnen (wie bei Rechte Maus) ?!

Verfasst: 30.10.2004 08:58
von Danilo
nco2k hat geschrieben:ich brauche einen befehl, mit welchem ich das kontextmenü öffnen kann.
SendMessage_() mit der Nachricht #WM_CONTEXTMENU.

Verfasst: 30.10.2004 12:10
von Lars
Oder wenn es um dein eigenes Window geht, CreatePopupMenu() und
DisplayPopupMenu().

Verfasst: 01.11.2004 10:06
von nco2k
vielen dank, erstmal!

@danilo
sorry, dass ich das jetzt fragen muss, aber wie sieht es mit den anderen parametern aus, wie genau muss das jetzt in etwa aussehen?! :oops:

mit winapi hab ich des öffteren so meine schwierigkeiten, sollte mich mehr damit auseinandersetzen. :oops:

c ya,
nco2k

Verfasst: 01.11.2004 11:06
von Danilo
nco2k hat geschrieben:@danilo
sorry, dass ich das jetzt fragen muss, aber wie sieht es mit den anderen parametern aus, wie genau muss das jetzt in etwa aussehen?! :oops:
SendMessage_(arg1,arg2,arg3,arg4)
arg1: Handle des Fensters an welches die Message gesendet wird
arg2: #WM_CONTEXTMENU, die Message
arg3: Handle des Fensters auf welchem der Rechtsklick war (kann auch ein Child sein, also ein Gadget)
arg4: MausKoordinaten, im unteren Word ist x, im oberen Word ist y

Das ContextMenu funktioniert bei RechtsKlick mit der Maus,
wenn man SHIFT+F10 drückt, und bei VK_APPS (das ist die
"Menu-Taste" gleich nehmen der rechten STRG-Taste auf
der Tastatur).

Ein Beispiel:

Code: Alles auswählen

;
; by Danilo, 01.11.2004 - german forum
;
If CreatePopupMenu(0)
  MenuItem(1, "Cut")
  MenuItem(2, "Copy")
  MenuItem(3, "Paste")
  MenuItem(4, "Quit")
Else
  End ; Error
EndIf

If CreatePopupMenu(1)
  MenuItem(1, "ButtonMenu 1")
  MenuItem(2, "ButtonMenu 2")
Else
  End ; Error
EndIf


Procedure WndProc(hWnd,Msg,wParam,lParam)
  Select Msg
    Case #WM_CONTEXTMENU
      ; Diese Message kommt automatisch von Windows
      ; bei Right-Click aufs Fenster und bei Shift+F10
      ; 
      ; Bei Shift + F10 sind die MausKoordinaten in lParam
      ; beide -1, weshalb wir dafr die Koordinaten des
      ; Fensters (wParam) nehmen:
      If lParam = $FFFFFFFF
        GetWindowRect_(wParam,r.RECT)
        lParam = (r\top<<16)|(r\left&$FFFF)
      EndIf
      ;
      ; Display PopUp Menu:
      If wParam = GadgetID(2)
        ; PopUp Menu fr den Button 2
        DisplayPopupMenu(1,wParam,lParam&$FFFF,(lParam>>16)&$FFFF)
      Else
        ; PopUp Menu fr den Rest
        DisplayPopupMenu(0,wParam,lParam&$FFFF,(lParam>>16)&$FFFF)
      EndIf
      ProcedureReturn 0
  EndSelect
  ProcedureReturn #PB_ProcessPureBasicEvents
EndProcedure


If OpenWindow(0,0,0,200,200,#PB_Window_Titlebar|#PB_Window_ScreenCentered,"Press SHIFT+F10")
  CreateGadgetList(WindowID())
  ButtonGadget(1,10,10,100,20,"PopUp Main Menu")
  ButtonGadget(2,10,35,100,20,"Right Click Me!")
  SetWindowCallback(@WndProc())

  Repeat
    Select WaitWindowEvent()
      Case #PB_EventGadget
        Select EventGadgetID()
          Case 1
            GetCursorPos_(p.POINT)
            SendMessage_(WindowID(0),#WM_CONTEXTMENU,WindowID(0),(p\y<<16)|(p\x&$FFFF))
        EndSelect
      Case #PB_EventMenu
        Select EventMenuID()
          Case 4 ; Quit
            Break
        EndSelect
    EndSelect
  ForEver
Else
  End ; Error
EndIf
Bei RechtsKlick aufs Fenster kommt das Menu(0), genauso
wie bei drücken des 1. Buttons und beim drücken von
SHIFT+F10 oder VK_APPS.

Der 2. Button hat ein eigenes PopupMenu, wenn Du auf dem
einen Rechtsklick machst.
Wenn Du den 2.Button mal normal (links) klickst, so daß er
den Focus hat, dann funktionieren auch SHIFT+F10 und VK_APPS
mit diesem Button.

So kann man ganz einfach jedem Gadget ein eigenes RechtsKlick-Menu
geben, indem man im Callback einfach nur wParam auswertet (wie gezeigt).
Das fuktioniert dann immer mit RechtsKlick, mit SHIFT+F10
und VK_APPS - also Windows-Standard.

Hope it helps... :)

Verfasst: 01.11.2004 11:49
von nco2k
klar, danke! :allright:

c ya,
nco2k