Symbol wird im Menü nicht angezeigt.



  • Ich öffne beim Klicken mit der rechten Maustaste ein Menü.
    Dass funktioniert soweit ganz gut. Jetzt möchte ich noch ein paar Symbole im Menü anzeigen.
    Doch aus irgend einem Grund wird das Test-Bild nicht angezeigt.
    Leute, weis jemand von euch was ich falsch gemacht habe?

    // PopupMenü -> Laden des Menü's und ersetzen der Texte
    //straMenu		CStringArray mit den Menü-Texten
    //DEF_MENU_FIRST_ID	ID des ersten Menüeintrages
    void CMainDlg::OnBnClickedButtonMenue()
    {
    	CMenu menu;
    	int pMenuID = 0;
    	DWORD SelectionMade;
    	// Menü laden
    	if(!menu.LoadMenu(IDR_MENU))
    	{
    		MessageSound(MB_ICONERROR);
    		return;
    	}
    
    	// Neue Texte in das Menü einfügen und Bitmap einfügen
    	for(int i=0; i< DEF_MENU_CNT;i++)
    	{
    		// Text setzen
    		menu.ModifyMenu(i+DEF_MENU_FIRST_ID, MF_BYCOMMAND|MF_STRING, i+DEF_MENU_FIRST_ID, straMenu[i]);
    
    		CBitmap cBmp;
    		// Testbild aus den Resourcen laden
    		BOOL bReturn = cBmp.LoadBitmap(MAKEINTRESOURCE(IDB_BITMAP1));
    		// Versuchen das Bild in das Menü zu setzen
    		bReturn = menu.SetMenuItemBitmaps(i+DEF_MENU_FIRST_ID, MF_BYCOMMAND,&cBmp,&cBmp);
    	}
    
    	CMenu* pPopup = menu.GetSubMenu(pMenuID);
    	ASSERT(pPopup != NULL);
    
    // Texte zu den Untermenüpositionen über die Position setzen
    	pPopup->ModifyMenu(POS_MENUE_NAVIGAION,MF_BYPOSITION,(UINT)menu.GetSubMenu(0)->GetSafeHmenu(),straMenu[7]);
    	pPopup->ModifyMenu(POS_MENUE_ANSICHT,MF_BYPOSITION,(UINT)menu.GetSubMenu(0)->GetSafeHmenu(),straMenu[22]);
    	pPopup->ModifyMenu(POS_MENUE_DRUCKEN,MF_BYPOSITION,(UINT)menu.GetSubMenu(0)->GetSafeHmenu(),straMenu[27]);
    
    	if(m_bVordergrund)
    	{
    		pPopup->CheckMenuItem(ID_ANSICHT_VORDERGRUND,MF_CHECKED|MF_BYCOMMAND);
    	}
    	else
    	{
    		pPopup->CheckMenuItem(ID_ANSICHT_VORDERGRUND,MF_UNCHECKED|MF_BYCOMMAND);
    	}
    	POINT pp;
    	GetCursorPos(&pp);
    	SelectionMade = pPopup->TrackPopupMenu(
    		TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD,
    		pp.x,pp.y,this);
    
    	if(SelectionMade)
    	{
    		PostMessage(WM_COMMAND,SelectionMade);
    	}
    	pPopup->DestroyMenu();
    }
    


  • Weis wirklich keiner was ich falsch gemacht haben könnte, außer dass ich die Fehler beim Lades ber BMP nicht abfrage?
    Ich bekomme aber beim Laden und beim Setzen der Bitmap jedes mal ein TRUE.

    Gibt es einen anderen Weg Icons /Bitmaps im Menü anzuzeigen?
    Die Links die ich dazu im Forum gefunden habe sind leider tod.



  • Jetzt hat dieser Beitrag über 100 Aufrufe.
    Es kann doch nicht sein dass mir keiner weiterhelfen kann.
    Hat denn wirklich keiner eine Vermutung was falsch laufen könnte?


  • Mod

    Wie sieht Dein Menü aus in der Der Ressource?
    Das Menü das Du anzeigst ist ein Submenu siehe

    CMenu* pPopup = menu.GetSubMenu(pMenuID);
    

    Das Menü das Du änderst ist das übergeordnete Menü dass Du lädst:

    if(!menu.LoadMenu(IDR_MENU))
    

    Du änderst also gar nichts!



  • Martin Richter schrieb:

    Wie sieht Dein Menü aus in der Der Ressource?

    Es ist ein normales Menü, so wie es über die Resourcen-Ansicht hinzugefügt wird, bei dem das SubMenü Nr.0 mit Platzhaltertext gefüllt ist.

    Martin Richter schrieb:

    Das Menü das Du anzeigst ist ein Submenu siehe

    CMenu* pPopup = menu.GetSubMenu(pMenuID);
    

    Das Menü das Du änderst ist das übergeordnete Menü dass Du lädst:

    if(!menu.LoadMenu(IDR_MENU))
    

    Du änderst also gar nichts!

    Soviel ich weis, kann man das Menü nur dann an der aktuellen Mausposition anzeigen, wenn man das Submenü extrahiert.
    Oder sehe ich das falsch?
    Denn wenn ich das Menü selbst anzeigen will, sehe ich nur einen senkrechten, grauen, Balken.

    Der Text wird definitiv geändert, da ich das Submenü über die ID's der einzelnen einträge ändere.

    Und wenn ich die Bilder bei pPopup einfüge, werden sie trotzdem nicht angezeigt.
    Langsam weis ich nicht mehr weiter.


  • Mod

    Zeig bitte Code. Du must pPopup ändern!



  • So werden leider auch keine Icons angezeigt

    void CMainDlg::OnRButtonUp(UINT nFlags, CPoint point)
    {
    	OnBnClickedButtonMenue();
    
    	CDialog::OnRButtonUp(nFlags, point);
    }
    
    // PopupMenü -> Laden des Menü's und ersetzen der Texte
    // Das Menü wird beim Loslassen der rechten Maustasten und beim Anklicken einer Schaltfläche gezeigt.
    
    //straMenu        CStringArray mit den Menü-Texten
    //DEF_MENU_FIRST_ID    ID des ersten Menüeintrages
    void CMainDlg::OnBnClickedButtonMenue()
    {
        CMenu menu;
        int pMenuID = 0;
        DWORD SelectionMade;
        // Menü laden
        if(!menu.LoadMenu(IDR_MENU))
        {
            MessageSound(MB_ICONERROR);
            return;
        }
    
        // Neue Texte in das Menü einfügen und Bitmap einfügen
        for(int i=0; i< DEF_MENU_CNT;i++)
        {
            // Text setzen
            menu.ModifyMenu(i+DEF_MENU_FIRST_ID, MF_BYCOMMAND|MF_STRING, i+DEF_MENU_FIRST_ID, straMenu[i]);
        }
    
        CMenu* pPopup = menu.GetSubMenu(pMenuID);
        ASSERT(pPopup != NULL);
    
    // Texte zu den Untermenüpositionen über die Position setzen
        pPopup->ModifyMenu(POS_MENUE_NAVIGAION,MF_BYPOSITION,(UINT)menu.GetSubMenu(0)->GetSafeHmenu(),straMenu[7]);
        pPopup->ModifyMenu(POS_MENUE_ANSICHT,MF_BYPOSITION,(UINT)menu.GetSubMenu(0)->GetSafeHmenu(),straMenu[22]);
        pPopup->ModifyMenu(POS_MENUE_DRUCKEN,MF_BYPOSITION,(UINT)menu.GetSubMenu(0)->GetSafeHmenu(),straMenu[27]);
    
        CBitmap cBmp;
        // Testbild aus den Resourcen laden
        if(!cBmp.LoadBitmap(MAKEINTRESOURCE(IDB_BITMAP1)))
        {
           //<TODO>Hier eine sinnvolle Fehlermeldung einsetzen</TODO>
           MessageBox(_T("Fehler"));
        }
        for(int i=0; i< DEF_MENU_CNT;i++)
        {
            // Versuchen das Bild in das Menü zu setzen
            if(!pPopup->SetMenuItemBitmaps(i+DEF_MENU_FIRST_ID, MF_BYCOMMAND,&cBmp,&cBmp))
           {
              //<TODO>Hier eine sinnvolle Fehlermeldung einsetzen</TODO>
              MessageBox(_T("Fehler"));
           }
        }
    
        if(m_bVordergrund)
        {
            pPopup->CheckMenuItem(ID_ANSICHT_VORDERGRUND,MF_CHECKED|MF_BYCOMMAND);
        }
        else
        {
            pPopup->CheckMenuItem(ID_ANSICHT_VORDERGRUND,MF_UNCHECKED|MF_BYCOMMAND);
        }
        POINT pp;
        GetCursorPos(&pp);
        SelectionMade = pPopup->TrackPopupMenu(
            TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_NONOTIFY | TPM_RETURNCMD,
            pp.x,pp.y,this);
    
        if(SelectionMade)
        {
            PostMessage(WM_COMMAND,SelectionMade);
        }
        pPopup->DestroyMenu();
    }
    

    Wie meinst du dass mit dem Ändern von pPopup?



  • Gibt es irgend eine Einstellung oder eine Funktion die man aufrufen muss damit das anzeigen von Symbolen im Popup-Menü angezeigt wird?

    Gibt es etwas dass man beachten muss damit es funktioniert?
    Langsam weis ich jetzt wirklich nicht mehr weiter.



  • Ich habe jetzt die Projektdateien .ncb, .user und .suo gelöscht.
    Und jetzt funktioniert das Anzeigen der bmp's im Menü.
    Ich weis zwar nicht wiso das funktioniert hat, weil das eigentlich nichts mit dem Fehler zu tun hat, aber es hat funktioniert.

    Danke für eure Hilfe.


  • Mod

    0815-Dau schrieb:

    Ich habe jetzt die Projektdateien .ncb, .user und .suo gelöscht.
    Und jetzt funktioniert das Anzeigen der bmp's im Menü.

    Diese Dateien haben nichts mit Deinem Problem zu tun, wie Du selber schon festgestellt hast.


Anmelden zum Antworten