Menü mit Icons



  • Hallo,

    wie kann ich denn vor einem Menüeintrag noch ein Icon anzeigen???

    Ich habe hier mein Icon für das Programm definiert:
    IDI_ICON ICON icon.ico

    Hier ist mein Menüeintrag:
    MENUITEM "&Test", IDM_Test, MFT_STRING, MFS_ENABLED

    Wie kann ich nun vor dem Eintrag ein Icon, GIF oder sonst
    was darstellen?

    Danke Robert



  • In den Resourcen kann man es glaube ich nicht direkt wählen, du kannst zur Laufzeit mit SetMenuItemBitmaps() Bitmaps für die Menüeinträge setzen...



  • Das geht aber nur sehr bedingt. Da die Funktion nicht dafür gedacht ist.

    SetMenuItemBitmaps
    The SetMenuItemBitmaps function associates the specified bitmap with a menu item. Whether the menu item is selected or clear, the system displays the appropriate bitmap next to the menu item.

    Also anstatt Häkchen.

    Unschön: Wenn ein Eintrag markiert ist, wird das Bitmap invertiert dargestellt. Bi jetzt hab eich noch nirgends im Web eien Lösung oder so gefunden. Keine Ahnung, wie die das bei Microsoft machen. ich hätte das nämlcih auch gerne.



  • Hi,
    also SetMenuItemBitmaps funktioniert nicht.
    Habe das gerade getestet. Mein Compiler bringt keinen
    Fehler doch beim test zeigt es einfach kein
    Icon im Menü an.

    Hat noch jemand eine andere Idee?
    (Scheint ja mehrere zu interessieren wie sowas geht)

    Danke
    Robert





  • Ich interressiere mich selber dafür wie ich ein icon daran pappen kann, und verwende kein MFC. Aber Coodeproject sind nur MFC und Ownerdrawn Menus gethdas einfacher?



  • Ich habe mit dem MFC Code auch noch meine Probleme.



  • Ich habe mich falsch ausgedrückt: ich habe gar keine MFC, da ich nicht VC++ benutze. Und MFC bitte ins MFC Forum



  • Original erstellt von Lars Skiba:
    Ich interressiere mich selber dafür wie ich ein icon daran pappen kann, und verwende kein MFC. Aber Coodeproject sind nur MFC und Ownerdrawn Menus gethdas einfacher?

    Habe mir jetzt mal mehrere Owner Draw Menus runtergeladen und
    ausprobiert. Die EXE-Files tun zwar wunderbar, aber compilieren
    der Sourcen geht bei keinem.
    Es muss doch irgendwo ein simples Beispiel für Menüs mit Icons geben.
    Hat denn noch niemand so was programmiert (kann ich mir fast nicht vorstellen).

    Robby



  • Es gibt fast in jeder Anwendung mit Menuicons, geht das echt nur mit Ownerdrawnmenus 😡 😮 🙄 😕



  • Also nochmal zum mitschreiben:

    ich lade ein Bitmap über die Funktion:
    HBITMAP LoadBitmapFile(const TCHAR *filename)
    {
    return (HBITMAP)LoadImage(NULL, filename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    }

    und rufe diese wie folgt auf:
    hBmp_Install = LoadBitmapFile("install.bmp");

    dann erstelle ich mein MenuItem:
    HMENU hMenu2;
    hMenu2 = CreatePopupMenu ();

    lstrcpy (string, "Test");
    mii.dwTypeData = string;
    mii.cch = lstrlen (string);
    mii.wID = 1;
    InsertMenuItem (hMenu2, 1, TRUE, &mii);

    und weise diesem MenuItem mein Bitmap zu:
    SetMenuItemBitmaps(hMenu2, 1, MF_BYPOSITION, hBmp_Install, hBmp_Install);

    Ich bekomme zwar keinen Compilerfehler, dummerweise
    zeigt er aber auch das Icon nicht an im Menü.

    Wo liegt der Fehler?
    Robert



  • OK Leute ich habs teilweise gelöst.

    Es muss natürlich heissen:
    SetMenuItemBitmaps(hMenu2, 1, TRUE, hBmp_Install, hBmp_Install);

    Dann zeigt er ein Menüicon an.(Restlicher Code wie oben)

    Was mich direkt zu meiner nächsten Frage bringt:
    Wie schaffe ich es, das er das Menüicon nicht invertiert
    wenn ich mit der Maus auf den Eintrag gehe???

    Gruß
    Robert



  • Hi,

    hier gibt's auch noch mal ein Beispiel, allerdings auch Ownerdraw. Anders geht's wohl nicht:
    http://win32programming.tripod.com/Win32tips06.html#3



  • könnte glatt in die FAQ wenn noch Code-Tags reingemacht werden 😉



  • Also nochmal zum mitschreiben und mit Code-Tags 😃 :

    ich lade ein Bitmap über die Funktion:

    HBITMAP LoadBitmapFile(const TCHAR *filename)
    {
        return (HBITMAP)LoadImage(NULL, filename, IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    }
    

    und rufe diese wie folgt auf:

    hBmp_Install = LoadBitmapFile("install.bmp");
    

    dann erstelle ich mein MenuItem:

    HMENU hMenu2;
    hMenu2 = CreatePopupMenu ();
    lstrcpy (string, "Test");
    mii.dwTypeData = string;
    mii.cch = lstrlen (string);
    mii.wID = 1;
    InsertMenuItem (hMenu2, 1, TRUE,  &mii);
    

    und weise diesem MenuItem mein Bitmap zu:

    SetMenuItemBitmaps(hMenu2, 1, TRUE, hBmp_Install, hBmp_Install);
    

    Ich hoffe einigen ist damit geholfen
    Robert


Anmelden zum Antworten