PopUp im Tray: Eintrag FETT darstellen



  • Hallo Forum,

    ich habe in meinem Programmtray ein Popup
    eingebunden. Darin sind 4 Einträge, die auch
    alle angezeigt werden. Jetzt möchte ich gerne
    den ersten Eintrag fett darstellen. Wie geht das ?



  • Niemand eine Idee 😕



  • Versuch's mal so:

    CMenu menu;
    ...
    
    menu.AppendMenu(MF_ENABLED | MF_STRING, id, text);
    
    // Zusätzliche Stati werden in einem Extra-Schritt
    // hinzugefügt, weil AppendMenu() Bits im Hiword ignoriert
    UINT state = MFS_DEFAULT;
    
    MENUITEMINFO mii = {0};
    mii.cbSize = sizeof(MENUITEMINFO);
    mii.fMask  = MIIM_STATE;
    if (!::GetMenuItemInfo(menu.m_hMenu, id, FALSE, &mii))
        return FALSE;
    mii.fState |= state;
    ::SetMenuItemInfo(menu.m_hMenu, id, FALSE, &mii);
    


  • Hi, sorry aber ich checks nicht wirklich.
    Mein Basiscode zum erzeugen des PopUp bei Rechtsklick
    auf das Systray-Icon:

    CMenu oMenu; 
                    if (oMenu.LoadMenu(IDR_MENU2))         
                    { 
                        CMenu* pPopup = oMenu.GetSubMenu(0); 
                        ASSERT(pPopup != NULL); 
                        CPoint oPoint; 
                        // Figure out where the mouse is so we 
                        // can display the menu near it. 
                        GetCursorPos(&oPoint); 
                        SetForegroundWindow(); 
                        pPopup->TrackPopupMenu( 
                            TPM_LEFTALIGN | TPM_RIGHTBUTTON, 
                            oPoint.x, oPoint.y, this);
    


  • - Da du das Menü aus der Resource lädst,
    brauchst du die Zeile mit AppendMenu nicht. Es sollte aber auch damit funktionieren.
    - Die Variable menu heißt bei dir oPopup
    - Und id ist die id des Menüeintrags, den du fett darstellen möchtest



  • Hi Uwe,

    es ist mir schon peinlich, aber ich bekomme noch Fehler:

    case WM_RBUTTONDOWN: 
                {// The user clicked the right mouse button. 
                    // Let's give them a menu so they can start/stop    
                    // the animation.    
                    CMenu oMenu; 
                    if (oMenu.LoadMenu(IDR_MENU2))         
                    { 
                        CMenu* pPopup = oMenu.GetSubMenu(0); 
                        ASSERT(pPopup != NULL); 
                        CPoint oPoint; 
                        // Figure out where the mouse is so we 
                        // can display the menu near it. 
                        GetCursorPos(&oPoint); 
                        SetForegroundWindow(); 
                        pPopup->TrackPopupMenu( 
                        TPM_LEFTALIGN | TPM_RIGHTBUTTON, 
                        oPoint.x, oPoint.y, this);  
    
    					//Eintrag Fett setzen
    UINT state = MFS_DEFAULT; 
    MENUITEMINFO mii = {0}; 
    mii.cbSize = sizeof(MENUITEMINFO); 
    mii.fMask  = MIIM_STATE; 
    if (!::GetMenuItemInfo(pPopup.m_hMenu, 32792, FALSE, &mii)) 
        return FALSE; 
    mii.fState |= state; 
    ::SetMenuItemInfo(pPopup.m_hMenu, 32792, FALSE, &mii); 
    
    	} 
    
    }
                break;
    

    Ist pPopup richtig ? = error C2228: Der linke Teil von '.m_hMenu' muss
    eine Klasse/Struktur/Union sein. Mit oMenu kann ich zwar kompilieren,
    aber leider hat es keine Auswirkung aufs Menu. 😮
    Die 32792 ist die ID meines Eintrages aus dem Menu



  • Du musst den Menüeintrag natürlich fett machen bevor das Menü aufgerufen wird.
    Und oPopup ist ein Zeiger, d.h. du greifst mit dem -> Operator auf die Member zu.
    Für den Menüeintrag solltest du auch einen Identifier vergeben, so was wie ID_ANIMATE_START oder so. Das machst du im Menü-Editor.

    // The user clicked the right mouse button. 
    // Let's give them a menu so they can start/stop     
    // the animation.     
    CMenu oMenu; 
    if (oMenu.LoadMenu(IDR_MAINFRAME))         
    { 
        CMenu* pPopup = oMenu.GetSubMenu(0); 
        ASSERT(pPopup != NULL); 
        CPoint oPoint; 
        // Figure out where the mouse is so we 
        // can display the menu near it. 
        GetCursorPos(&oPoint); 
        SetForegroundWindow(); 
    
        //Eintrag Fett setzen 
        UINT state = MFS_DEFAULT; 
        MENUITEMINFO mii = {0}; 
        mii.cbSize = sizeof(MENUITEMINFO); 
        mii.fMask  = MIIM_STATE; 
        if (::GetMenuItemInfo(pPopup->m_hMenu, 32792, FALSE, &mii)) 
        {
            mii.fState |= state; 
            ::SetMenuItemInfo(pPopup->m_hMenu, 32792, FALSE, &mii); 
        }
    
        // Jetzt das Menü aufrufen
        pPopup->TrackPopupMenu( 
        TPM_LEFTALIGN | TPM_RIGHTBUTTON, 
        oPoint.x, oPoint.y, this);   
    }
    


  • 👍 🙂


Anmelden zum Antworten