none
CMenu item mit 32x32 Bitmaps passt sich nicht der Größe der Bitmap an unter XP RRS feed

  • Frage

  • Mittels SetMenuItemBitmaps setzen wir 32x32 Bitmaps an den menu items. Unter Win7 klappt das wunderbar. Unter XP bleiben die items 16 pixel hoch und die Bitmaps werden abgeschnitten. Kann man die Höhe der items beeinflussen, ohne owner drawn menus zu verwenden?

    Besten Dank,

    T. Müller

    Donnerstag, 10. Januar 2013 12:56

Antworten

  • Es kommt darauf an, wie Du das Menu mit einem Bitmap versiehst, es gibt da zwei Wege. Hier mein Ergebnis in XP:

    Ich habe für das obige Beispiel für beide Fälle das gleiche Bitmap genommen, dass oben auch im bild mit im Screen Capture drin ist. Das Bitmap in meinem Beispiel ist 28x28, die 4 kleinen quadrate jeweils 16x16. Der unterschied ist, einmal nutze ich SetMenuItemBitmaps, einmal SetMenuItemInfo.

    Hier ein Copdeschnipsel:

    void CBmpmenuDlg::OnContextMenu(CWnd* pWnd, CPoint point) 
    {
      CBitmap l_Bmp_ics;
    	CMenu* l_Menu_pics=new CMenu();               
      CMenu* l_PopupMenu_pics;
      l_Bmp_ics.LoadBitmap(IDB_BITMAP);
      l_Menu_pics->LoadMenu(IDR_MENU);
      l_PopupMenu_pics=l_Menu_pics->GetSubMenu(0);
      l_PopupMenu_pics->SetMenuItemBitmaps(ID_ITEM_ITEM2, MF_BYCOMMAND, &l_Bmp_ics, &l_Bmp_ics);
      MENUITEMINFO mii = { sizeof(mii) };
      mii.fMask = MIIM_BITMAP;
      mii.hbmpItem = (HBITMAP)l_Bmp_ics;
        
      SetMenuItemInfo(l_PopupMenu_pics->m_hMenu, ID_ITEM_ITEM1, MF_BYCOMMAND, &mii);
        
      l_PopupMenu_pics->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON
                       , point.x, point.y
                       , this);	
      delete l_Menu_pics;
    	
    }


    Best regards

    Bordon

    Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.


    • Bearbeitet Bordon Freitag, 11. Januar 2013 06:21
    • Als Antwort markiert milonass Samstag, 12. Januar 2013 16:15
    Freitag, 11. Januar 2013 06:20

Alle Antworten

  • Es kommt darauf an, wie Du das Menu mit einem Bitmap versiehst, es gibt da zwei Wege. Hier mein Ergebnis in XP:

    Ich habe für das obige Beispiel für beide Fälle das gleiche Bitmap genommen, dass oben auch im bild mit im Screen Capture drin ist. Das Bitmap in meinem Beispiel ist 28x28, die 4 kleinen quadrate jeweils 16x16. Der unterschied ist, einmal nutze ich SetMenuItemBitmaps, einmal SetMenuItemInfo.

    Hier ein Copdeschnipsel:

    void CBmpmenuDlg::OnContextMenu(CWnd* pWnd, CPoint point) 
    {
      CBitmap l_Bmp_ics;
    	CMenu* l_Menu_pics=new CMenu();               
      CMenu* l_PopupMenu_pics;
      l_Bmp_ics.LoadBitmap(IDB_BITMAP);
      l_Menu_pics->LoadMenu(IDR_MENU);
      l_PopupMenu_pics=l_Menu_pics->GetSubMenu(0);
      l_PopupMenu_pics->SetMenuItemBitmaps(ID_ITEM_ITEM2, MF_BYCOMMAND, &l_Bmp_ics, &l_Bmp_ics);
      MENUITEMINFO mii = { sizeof(mii) };
      mii.fMask = MIIM_BITMAP;
      mii.hbmpItem = (HBITMAP)l_Bmp_ics;
        
      SetMenuItemInfo(l_PopupMenu_pics->m_hMenu, ID_ITEM_ITEM1, MF_BYCOMMAND, &mii);
        
      l_PopupMenu_pics->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON
                       , point.x, point.y
                       , this);	
      delete l_Menu_pics;
    	
    }


    Best regards

    Bordon

    Note: Posted code pieces may not have a good programming style and may not perfect. It is also possible that they do not work in all situations. Code pieces are only indended to explain something particualar.


    • Bearbeitet Bordon Freitag, 11. Januar 2013 06:21
    • Als Antwort markiert milonass Samstag, 12. Januar 2013 16:15
    Freitag, 11. Januar 2013 06:20
  • Das hat geklappt. Danke.
    Samstag, 12. Januar 2013 16:15