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

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

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

Beitrag von nco2k »

hi folks,

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

vielen dank, im voraus!

c ya,
nco2k
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

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

Beitrag von Danilo »

nco2k hat geschrieben:ich brauche einen befehl, mit welchem ich das kontextmenü öffnen kann.
SendMessage_() mit der Nachricht #WM_CONTEXTMENU.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Lars
Beiträge: 347
Registriert: 31.08.2004 23:53
Wohnort: Shanghai
Kontaktdaten:

Beitrag von Lars »

Oder wenn es um dein eigenes Window geht, CreatePopupMenu() und
DisplayPopupMenu().
Lars
The only problem with troubleshooting is, that sometimes the trouble shoots back.
P4 2,6Ghz, 512MB RAM, GeForce 6200, WinXP Pro SP2, PB V3.94
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag 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
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag 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... :)
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
nco2k
Beiträge: 892
Registriert: 08.09.2004 23:13

Beitrag von nco2k »

klar, danke! :allright:

c ya,
nco2k
Antworten