Menüs nachträglich erweitern

Für allgemeine Fragen zur Programmierung mit PureBasic.
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

Menüs nachträglich erweitern

Beitrag von SBond »

Hi Leute,

gibt es eine Möglichkeit, bestehende Menüs zu erweitern? Ich nutze in meinem Programm verschiedene Module, die das Menü unabhängig voneinander mit bestimmten Einträgen erweitern sollen. Das Problem ist dabei, dass existierende Menügruppen (z.B. Datei, Ansicht, Extras, ...) nicht um die Einträge erweitert werden. Statt dessen werden neue Gruppen mit den identischen Namen erzeugt, in denen die Einträge hinzugefügt werden. Das ist natürlich nicht so toll.


Problembeispiel:

Code: Alles auswählen

OpenWindow(0, 200, 200, 200, 100, "")

CreateMenu(0, WindowID(0))
MenuTitle("Datei")
MenuItem(1, "Öffnen")
MenuItem(2, "Speichern")
MenuItem(3, "Beenden")

; eine nachträgliche Erweiterung...
MenuTitle("Datei")
MenuItem(4, "Einstellungen")

Repeat : Until WaitWindowEvent()=#PB_Event_CloseWindow
viele Grüße,
SBond
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
X360 Andy
Beiträge: 1206
Registriert: 11.05.2008 00:22
Wohnort: Bodensee
Kontaktdaten:

Re: Menüs nachträglich erweitern

Beitrag von X360 Andy »

Das einfache ist es wohl das Menü neuzuzeichnen, FreeMenu() ist dabei dein Freund.

Grüße Andreas
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Menüs nachträglich erweitern

Beitrag von RSBasic »

Code: Alles auswählen

EnableExplicit

Define MENUITEMINFO.MENUITEMINFO

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  If CreateMenu(1, WindowID(0))
    MenuTitle("Datei")
    MenuItem(1, "Öffnen")
    MenuItem(2, "Speichern")
    MenuItem(3, "Beenden")
  EndIf
  
  MENUITEMINFO\cbSize = SizeOf(MENUITEMINFO)
  MENUITEMINFO\fMask = #MIIM_TYPE | #MIIM_ID
  MENUITEMINFO\fType = #MFT_STRING
  MENUITEMINFO\dwTypeData = @"Einstellungen"
  MENUITEMINFO\wID = 4
  
  InsertMenuItem_(MenuID(1), 2, #False, MENUITEMINFO)
  
  Repeat
    Select WaitWindowEvent()
      Case #PB_Event_Menu
        Select EventMenu()
          Case 4
            Debug "Einstellungen"
        EndSelect
      Case #PB_Event_CloseWindow
        End
    EndSelect
  ForEver
EndIf
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
SBond
Beiträge: 266
Registriert: 22.05.2013 20:35

Re: Menüs nachträglich erweitern

Beitrag von SBond »

ahh super :)

@RSBasic: Schaust du immer gezielt in MSDN oder hast du einfach nur viel Erfahrung mit WinAPIs? Bei dir kommt es immer wie aus der Pistole geschossen. :mrgreen: Ich habe meistens noch Schwierigkeiten bei der Parametrierung der WinAPI-Befehle, aber ich hoffe dass ich irgendwann mal selbstständiger damit umgehen kann.

vielen Dank ;)
41 6c 73 6f 20 77 65 6e 6e 20 64 75 20 73 6f 20 76 69 65 6c 20 4c 61 6e 67 65 77 65 69 6c 65 20 68 61 73 74 2c 20 64 61 6e 6e 20 6b 61 6e 6e 73 74 20 64 75 20 61 75 63 68 20 67 6c 65 69 63 68 20 7a 75 20 6d 69 72 20 6b 6f 6d 6d 65 6e 20 75 6e 64 20 61 62 77 61 73 63 68 65 6e 2e

:D
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Menüs nachträglich erweitern

Beitrag von RSBasic »

Falls ich das bereits in meiner WinAPI Library hinzugefügt habe, dann schaue ich erstmal dort nach. Falls nicht, dann schau ich auf MSDN und suche die jeweilige Funktion raus. Dann lese ich die Funktions- und Parameterbeschreibung durch und versuche es in PB umzusetzen. Bei solchen Kleinigkeiten geht das recht fix. Falls es aufwändiger sein sollte, dann schaue ich zusätzlich auch in WinAPI-Foren und gucke, ob da bereits ein Beispielcode gibt, den ich nach PB konvertiere.

In diesem Fall gab sowas in meiner WinAPI Library noch nicht und ich habe auf MSDN in der MENU-Kategorie nach der Funktion gesucht, mit der man Menü-Einträge hinzufügen kann. Diese habe ich dann mit Hilfe der MSDN-Beschreibung einfach nach PB umgesetzt.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten