Problem mit SetMenuItemBitmaps_()

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Benutzeravatar
Spirit
Beiträge: 174
Registriert: 13.04.2005 19:09

Problem mit SetMenuItemBitmaps_()

Beitrag von Spirit »

Hallo!

Ich habe ein Problem mit SetMenuItemBitmaps_(). Mit Popup Menus funktioniert es:

Code: Alles auswählen

hWnd=OpenWindow(0, 0, 0, 300, 200, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "Menu")

If hWnd
  
  CX_CMark=GetSystemMetrics_(#SM_CXMENUCHECK)
  CY_CMark=GetSystemMetrics_(#SM_CYMENUCHECK)
  
  CreateImage(0, CX_CMark, CY_CMark)
  StartDrawing(ImageOutput())
  Box(2, 2, 5, 5, $0000FF)
  StopDrawing()
  
  hMenu=CreatePopupMenu(0) : If hMenu
    MenuItem(0, "Test")
    SetMenuItemBitmaps_(hMenu, 0, #MF_BYPOSITION, ImageID(), ImageID())
  EndIf
  
  Repeat
    Event=WaitWindowEvent()
    If Event=#WM_RBUTTONDOWN
      DisplayPopupMenu(0, hWnd)
    EndIf
  Until Event=#PB_Event_CloseWindow 
  
EndIf

End
Aber mit einem normalen Menu nicht:

Code: Alles auswählen

hWnd=OpenWindow(0, 0, 0, 300, 200, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "Menu")

If hWnd
  
  CX_CMark=GetSystemMetrics_(#SM_CXMENUCHECK)
  CY_CMark=GetSystemMetrics_(#SM_CYMENUCHECK)
  
  CreateImage(0, CX_CMark, CY_CMark)
  StartDrawing(ImageOutput())
  Box(2, 2, 5, 5, $0000FF)
  StopDrawing()
  
  hMenu=CreateMenu(0, hWnd) : If hMenu
    MenuTitle("Datei")
    MenuItem(0, "Test")
    SetMenuItemBitmaps_(hMenu, 0, #MF_BYPOSITION, ImageID(), ImageID())
  EndIf
  
  Repeat
    Event=WaitWindowEvent()
  Until Event=#PB_Event_CloseWindow 
  
EndIf

End
Weiß jemand, wie man das Bild auch bei einem normalen Menu verändern kann? Danke schonmal im vorraus!
Benutzeravatar
Ynnus
Beiträge: 855
Registriert: 29.08.2004 01:37
Kontaktdaten:

Beitrag von Ynnus »

hMenu

Identifies the menu containing the item to receive new check mark bitmaps.
Soll heißen, du gibst in dem Befehl das Menü an, dessen item dann ein Bitmao bekommt. Nicht das Menü selbst. Demnach funktioniert es nicht bei den eigenen Menüs, da dieser Befehl nur für die Items der Menüs geht.
Und scheinbar werden die MenuTitle-Einträge nicht als Menuitems gehandhabt in PB, wodurch du durch Angabe des Items direkt auf die Items der MenuTitles zurückgreifst.
Benutzeravatar
Spirit
Beiträge: 174
Registriert: 13.04.2005 19:09

Beitrag von Spirit »

Wie bekomme ich denn die MenuID des Unter-Menus?
Benutzeravatar
Danilo
-= Anfänger =-
Beiträge: 2284
Registriert: 29.08.2004 03:07

Beitrag von Danilo »

BlueSpirit hat geschrieben:Wie bekomme ich denn die MenuID des Unter-Menus?
Nimm doch einfach #MF_BYCOMMAND, das ist dann gleichzeitig
Deine MenuItemID die Du bei MenuItem angegeben hast:

Code: Alles auswählen

hWnd=OpenWindow(0, 0, 0, 300, 200, #PB_Window_SystemMenu|#PB_Window_ScreenCentered, "Menu")

If hWnd
 
  CX_CMark=GetSystemMetrics_(#SM_CXMENUCHECK)
  CY_CMark=GetSystemMetrics_(#SM_CYMENUCHECK)
 
  If CreateImage(0, CX_CMark, CY_CMark)
    If StartDrawing(ImageOutput())
      Box(0,0,CX_CMark,CY_CMark,GetSysColor_(#COLOR_MENU))
      Circle(CX_CMark/2,CY_CMark/2,CX_CMark/3,GetSysColor_(#COLOR_MENUTEXT))
      StopDrawing()
    EndIf
  EndIf

  hMenu=CreateMenu(0, hWnd) : If hMenu
    MenuTitle("Datei")
      MenuItem(1, "Test")
      OpenSubMenu("SubMenu 1")
        MenuItem(2, "Sub1\Item1")
      CloseSubMenu()
      MenuItem(3,"Test 2")
    MenuTitle("Bearbeiten")
      MenuItem(4,"Ausschneiden")
      MenuItem(5,"Kopieren")
      MenuItem(6,"Einfgen")
      
      For i = 1 To 6
        SetMenuItemBitmaps_(hMenu, i, #MF_BYCOMMAND, ImageID(), ImageID())
      Next i
  EndIf

  Repeat
    Event=WaitWindowEvent()
  Until Event=#PB_Event_CloseWindow
 
EndIf

End
So ist es IMHO auch einfacher, da Du so die selben Nummern
wie bei PB verwendest.
cya,
...Danilo
"Ein Genie besteht zu 10% aus Inspiration und zu 90% aus Transpiration" - Max Planck
Benutzeravatar
Spirit
Beiträge: 174
Registriert: 13.04.2005 19:09

Beitrag von Spirit »

Danke für die Hilfe! :allright:
Antworten