Tray Icon mit Menue



  • Wie bekommt man es hin ein erstelltes menue bei klickt auf das Icon anzuzeigen?



  • In der OnTrayMessage
    die Mousenachricht z.B

    WM_RBUTTONDOWN
    abfangen und dann das menü in der funktion laden.

    LONG CThreaddefaultDlg::OnTrayMessage(WPARAM wparam, LPARAM lparam)
    {  
       switch (lparam)
        {
            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_MENU1))        
                    {
                        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); 
                    }
                }
                break;
            case WM_LBUTTONDBLCLK:
                {
                    ShowWindow(SW_SHOW);
                }
        }
        return 0;
    }
    


  • Habe den Code benutzt.
    Habe es in der dlg.h so fest gelegt:

    LONG CTrayDlg::OnTrayMessage(WPARAM wparam, LPARAM lparam);
    

    Aber es gesieht nichts bei Rechtsklickt.
    Wo kann das Problem liegen?



  • Soory für den Rechtschreibfehler.

    Habe den Code von Unix-Tom benutzt.(PS: Danke)
    Diesen habe ich in der dlg.h so fest gelegt:

    LONG CTrayDlg::OnTrayMessage(WPARAM wparam, LPARAM lparam);
    

    Aber es geschieht nichts bei Rechtsklickt auf das TrayIcon.
    Wo kann das Problem liegen?



  • Nicht einfach den Code kopie/paste

    Der code wird aufgrund einer Message ausgeführt die auch in die
    MESSAGE_MAP eingetragen werden muss.
    z.B.

    const UINT IconID = WM_APP + 1;

    BEGIN_MESSAGE_MAP
    ON_MESSAGE( IconID, OnTrayMessage )

    END_MESSAGE_MAP()

    Header

    afx_msg LONG OnTrayMessage( WPARAM wparam, LPARAM lparam );



  • Es geht irgent wie nicht.

    const UINT IconID = WM_APP + 1;
    
    BEGIN_MESSAGE_MAP(CCSStarterDlg, CDialog)
        //{{AFX_MSG_MAP(CCSStarterDlg)
        ON_MESSAGE( IconID, OnTrayMessage )
        ON_WM_SYSCOMMAND()
        ON_WM_QUERYDRAGICON()
        ON_WM_CLOSE()
        ON_WM_PAINT()
        //}}AFX_MSG_MAP
    END_MESSAGE_MAP()
    
    LONG CCSStarterDlg::OnTrayMessage(WPARAM wparam, LPARAM lparam)
    {  
    
       switch (lparam)
        {
            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_MENU_TRAY))        
                    {
                        CMenu* pPopup = oMenu.GetSubMenu(1);
                        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); 
                    }
                }
                break;
            case WM_LBUTTONDBLCLK:
                {
                    ShowWindow(SW_SHOW);
                }
        }
        return 0;
    }
    

    header

    // Generierte Message-Map-Funktionen
        //{{AFX_MSG(CCSStarterDlg)
        virtual BOOL OnInitDialog();
        afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
        afx_msg LONG OnTrayMessage( WPARAM wparam, LPARAM lparam );
        afx_msg HCURSOR OnQueryDragIcon();
        afx_msg void OnClose();
        virtual void OnOK();
        virtual void OnCancel();
        afx_msg void OnPaint();
        //}}AFX_MSG
        DECLARE_MESSAGE_MAP()
    

    Das müste doch gehen. Das Icon liegt schön in dem Tray doch leider geschied auf rechtsklick nichts.



  • Alles versucht aber keine chance.



  • Schau mal bei Codeguru. Dort gibt es Klassen für TrayIcons.



  • Habe ich schon gesehen. Aber irgent wie steige ich da nicht ganz durch.



  • Wenn du dich Registrierst kannsz du dein Programm zum Download bereitsstellen und ich schaue es mir an.
    Einen Code gebe ich dir nicht da du dénn dann wieder entziffern musst.



  • Recht es evl wenn ich meine dlg.cpp und meine dlg.h poster? Weil ich habe in diesen beiden Datein was verändert. Und es ist bist jetzt auch nur dein Code drin.


Anmelden zum Antworten