Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » VC++ / MFC » Tray Icon

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
14.02.2003, 21:26 Uhr
~Lutz
Gast


Ich rufe ein Tray Icon auf und zwar so:


C++:
BOOL  CTestDlg::TrayIcon()
{
   NOTIFYICONDATA tnd;
   ZeroMemory(&tnd, sizeof (NOTIFYICONDATA));
   tnd.cbSize = sizeof (NOTIFYICONDATA);
   tnd.hWnd = this ->m_hWnd;
   tnd.uID = 1;
   tnd.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
   tnd.uCallbackMessage = WM_NOTIFICATION;
   tnd.hIcon = (HICON) LoadImage(AfxGetApp()->m_hInstance,MAKEINTRESOURCE(IDI_MINI),IMAGE_ICON,32,32,LR_SHARED|LR_DEFAULTCOLOR);
   tnd.szTip[64]='\0';
   lstrcpyn(tnd.szTip,"CSStarter-Tray",sizeof(tnd.szTip));
   Shell_NotifyIcon(NIM_ADD,&tnd);
   return TRUE;
}



Nur leider enstehen so 2 Icon's.Wenn man über das ein mit der Maus rüber fährst is es entfernt.Aber das sieht nicht so tool aus.

Frage 2:

Wie bekommt man es hin ein Menue auf ein Tray Icon zu setzen.
ALso rechtsklickt und es erscheint das menue.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
14.02.2003, 22:51 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo Lutz,
siehe Bsp:

C++:
void CTrayDlg::OnBnClickedTray()
{
    ShowWindow(SW_HIDE);    
    NOTIFYICONDATA icondata;    
    ZeroMemory(&icondata, sizeof (NOTIFYICONDATA));
    icondata.cbSize = sizeof (NOTIFYICONDATA);  
    icondata.hWnd = this->m_hWnd;
    icondata.uID = 1;
    icondata.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
    icondata.uCallbackMessage = MYWM_NOTIFYICON; /* #define MYWM_NOTIFYICON WM_USER+1 */
    icondata.hIcon =  (HICON)LoadImage(AfxGetApp()->m_hInstance, MAKEINTRESOURCE
                               (IDI_ICON1), IMAGE_ICON,16,16,LR_SHARED|LR_DEFAULTCOLOR);
    
    lstrcpyn(icondata.szTip, _T("Tray Demo"), sizeof(icondata.szTip));
    
    Shell_NotifyIcon(NIM_ADD, &icondata);
}

LRESULT CTrayDlg::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
{
    CMenu menue, *pMenu;
    CWnd* pTarget = AfxGetMainWnd();
    switch (message){
        case MYWM_NOTIFYICON:
            switch (LOWORD(lParam)){
        case WM_RBUTTONUP:
            if (LOWORD(lParam) == WM_RBUTTONUP){
                if (!menue.LoadMenu(IDR_MENU1))
                    return 0;
                if (!(pMenu = menue.GetSubMenu(0)))
                    return 0;
                //::SetMenuDefaultItem(pMenu->m_hMenu, m_MenueItemID, m_MenueItemByPos);
                //Anzeigen
                CPoint pos;
                GetCursorPos(&pos);
                pTarget->SetForegroundWindow();
                ::TrackPopupMenu(pMenu->m_hMenu, 0, pos.x, pos.y, 0,
                         pTarget->GetSafeHwnd(), NULL);
                pTarget->PostMessage(WM_NULL, 0, 0);
                menue.DestroyMenu();
            }
            break;
        case WM_LBUTTONUP:
            NOTIFYICONDATA iconData;
            iconData.cbSize = sizeof(NOTIFYICONDATA);
            iconData.hWnd = this->GetSafeHwnd();
            iconData.uID = 1;
            Shell_NotifyIcon(NIM_DELETE, &iconData);
            ShowWindow(SW_SHOW);
            SetForegroundWindow();
            break;
        }
        break;
    }
    return CDialog::WindowProc(message, wParam, lParam);
}


Hab jetzt nicht geprüft warum bei Dir zwei Icon erscheinen(evtl. 32x32?).
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 14.02.2003 um 22:53 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
14.02.2003, 23:06 Uhr
~Lutz
Gast


Ok das mit 2 Icon hat sich geklärt .

Nur er zeigt das menue nirgents an.

#define MYWM_NOTIFYICON(WM_USER + 100)

sonnst noch was?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
14.02.2003, 23:30 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo,

Zitat:
~Lutz postete
Nur er zeigt das menue nirgents an.

Popup

Zitat:
sonnst noch was?

Sorry das ich Dir geantwortet habe. Passiert mir nicht wieder!
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe

Dieser Post wurde am 14.02.2003 um 23:32 Uhr von Uwe editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
15.02.2003, 11:03 Uhr
~Lutz
Gast


Das mit sonst noch was war so gemeint:

Ich alles Deklariet (ohne fehler). Habe noch mal es überprüft.Aber das Menue läst sich nicht aufrufen.Mit sonst noch was wollte cih eigentlich fragen ob ich noch irgent waqs ver gessen habe.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
15.02.2003, 17:49 Uhr
Uwe
C/C++ Master
(Administrator)


Hallo Lutz,

Zitat:
~Lutz postete
Das mit sonst noch was war so gemeint:


OK. Ist eben der Nachteil vom geschriebenen Wort, manchmal kommt es eben falsch rüber...

Zu Thema:
Ich nehme an Du hast ein Menü erzeugt. Ist dieses hat die Eigenschaft "Popup". Wenn Du einen Rechtsklick auf Dein Trayicon machst bzw. richtiger die Nachricht WM_RBUTTONUP auslöst, sollte dann eigentlich das Menü angezeigt werden.

Aufbau von z.B. IDR_MENU1

C++:
Text          //(Eigenschaft Popup)
Item 1
Item 2
Item 3


Wenn es nicht funktioniert könnte ich Dir ja einmal eine Demo schicken.
--
"Es ist schwierig, ein Programm wirklich idiotensicher zu machen, weil Idioten so genial sind."

Bis dann...
Uwe
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
15.02.2003, 21:04 Uhr
~Lutz
Gast


Hast Recht war Popup Danke.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ VC++ / MFC ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: