MenuBar Hintergrundfarbe - Hat sich erledigt

Anfängerfragen zum Programmieren mit PureBasic.
Michael(362)
Beiträge: 16
Registriert: 28.07.2019 12:51

MenuBar Hintergrundfarbe - Hat sich erledigt

Beitrag von Michael(362) »

Moin,
ich versuche mit folgendem Code die Hintergrundfarbe einer Menubar zu ändern:

Code: Alles auswählen

Structure MENUINFO
  cbSize.l
  fMask.l
  dwStyle.l
  cyMax.l
  hbrBack.i
  dwContextHelpID.l
  dwMenuData.l
EndStructure
#MIM_BACKGROUND = $2
#MIM_APPLYTOSUBMENUS = $80000000
Define MainMenu.l
 
Procedure SetMenuBackgroundcolor(Menu.l)
  Define hBrush1.l, mi.MENUINFO
  hBrush1 = CreateSolidBrush_(RGB(255,0,0))
  With mi
    mi\cbSize = SizeOf(MENUINFO)
    mi\fMask = #MIM_BACKGROUND|#MIM_APPLYTOSUBMENUS
    mi\hbrBack = hBrush1                           
  EndWith
  SetMenuInfo_(Menu, @mi)
  DrawMenuBar_(WindowID(0))
EndProcedure
  
  
OpenWindow(0, 0, 0, 500, 300, "Test", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
MainMenu = CreateMenu(1, WindowID(0))
  MenuTitle("Titel1")
  MenuItem(1, "Item1")
  MenuTitle("Titel2")
  MenuItem(1, "Item1")
SetMenuBackgroundcolor(MainMenu)

Repeat
  Event = WaitWindowEvent()
  If Event = #PB_Event_CloseWindow
    DeleteObject_(hBrush1)
  EndIf
Until Event = #PB_Event_CloseWindow
Das funktioniert auf den ersten Blick auch. Aber wenn ein Menutitle geklickt wird bekommt er wieder seine Systemfarbe.
Gibt es die Möglichkeit auch diese Hintergrundfarbe zu ändern?

Gruß Michael

Edit:
Habe herausgefunden das Dies nur Ownerdrawn Objekten funktioniert indem man das Menü selbst zeichnet.
Vielen Dank an die Microsoft Programmierer wegen der zickigen Controls.
PureBasic 5.72 LTS (Windows - x86)
Windows 10 x86
Benutzeravatar
Shardik
Beiträge: 738
Registriert: 25.01.2005 12:19

Re: MenuBar Hintergrundfarbe - Hat sich erledigt

Beitrag von Shardik »

Michael(362) hat geschrieben:Edit:
Habe herausgefunden das Dies nur Ownerdrawn Objekten funktioniert indem man das Menü selbst zeichnet.
Vielen Dank an die Microsoft Programmierer wegen der zickigen Controls.
Es ist nicht nötig mit Ownerdraw zu arbeiten. Dein obiges Beispiel funktioniert problemlos mit Windows 7 SP1 x64 und PB 5.71 x86, aber nicht mit PB 5.71 x64. Um sowohl mit 32 als auch mit 64 Bit funktionsfähig zu sein, musst Du die lediglich die Struktur von MENUINFO anpassen, wie es luis im englischen Forum gezeigt hat:

Code: Alles auswählen

Structure MENUINFO Align #PB_Structure_AlignC
  cbSize.l
  fMask.l
  dwStyle.l
  cyMax.l
  hbrBack.i
  dwContextHelpID.l
  dwMenuData.i
EndStructure
Michael(362)
Beiträge: 16
Registriert: 28.07.2019 12:51

Re: MenuBar Hintergrundfarbe - Hat sich erledigt

Beitrag von Michael(362) »

Moin Shardik,

ich habe Version 5.71 installiert und das Beispiel von luis ausprobiert.
Aber das Ergebnis ist das Gleiche.
Vielleicht habe ich das Problem auch falsch beschrieben. Wenn ich z.B. den Code von luis starte wird das Menü mit einem gelben Hintergrund angezeigt. Wenn ich dann mit der Maus einen Hauptmenüpunkt anklicke werden die Untermenüs auch mit einem gelben Hintergrund angezeigt. Aber der Hintergrund von dem angeklickten Hauptmenüpunkt wird dann mit einer grauen Hintergrundfarne angezeigt.

Trotzdem vielen Dank für Deine Antwort
Gruß Michael

Edit:
Habe das Beispiel von luis auf Windows 10 Pro 64-Bit, Purebasic V5.71 ausprobiert.
Hier wird der Hintergrund der Hauptmenüpunkte gar nicht eingefärbt. Nur der Hintergrund der Untermenüpunkte wird gelb eingefärbt.
PureBasic 5.72 LTS (Windows - x86)
Windows 10 x86
Antworten