Seite 1 von 1

Problem mit SetMenuItemBitmaps_()

Verfasst: 05.06.2005 15:35
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!

Verfasst: 05.06.2005 15:59
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.

Verfasst: 06.06.2005 07:30
von Spirit
Wie bekomme ich denn die MenuID des Unter-Menus?

Verfasst: 06.06.2005 08:11
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.

Verfasst: 06.06.2005 19:13
von Spirit
Danke für die Hilfe! :allright: