ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
1128
1128
EMPFEHLEN
-
15.02.05 11:08 #1
- Registriert seit
- Feb 2005
- Beiträge
- 45
Hallo zusammen,
Ich habe in meiner MFC-Anwendung ein Tray Icon welches ich nach einem bestimmten Event ändern möchte. Das ganze funktioniert auch einigermaßen, aber leider bleibt das vorherige Icon immer im Tray stehen, zumindest so lange bis ich mit der Maus darüber fahre.
Zusammengefasst stellt sich die Frage wie kann ich das angezeigte Icon ändern? Oder. Wie kann ich das momentane Icon löschen und ein neues erstellen ohne, dass das alte Icon im Tray stehen bleibt.
Grüße
-
Das geht alles über die Shell_NotifyIcon-Routine, nur statt NIM_ADD benutze NIM_MODIFY, um ein vorhandenes Icon zu ändern. Shell_NotifyIcon identifiziert ein Icon anhand des HWND Handles und der ID, die du dem Icon gibst. Wenn du da dieselben Werte einträgst wie bei NIM_ADD, wird das vorherige geändert.
-
15.02.05 11:45 #3
- Registriert seit
- Feb 2005
- Beiträge
- 45
Erstmal, Danke für deine schnelle Antwort.
Leider habe ich nicht den blassesten schimmer von c++ und das ganz ist zudem noch mein erstes Projekt. Dieses NIM_MODIFY habe ich eher zufällig schon in den Definitionen des shellapi.h gefunden. Und das ganze funktioniert aber nicht. Ich vermute ich habe das Prinzip nicht verstanden.
Im groben geht es darum eine gewisse Anzahl von Prozessen in einen bestimmten Zeitintervall zu zählen und das Ergebnis im Tray anzuzeigen.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
[size=2]BOOL CMainFrame::TrayMessage(DWORD dwMessage){ ProzessCount proz; [/size][size=2][color=#0000ff]int[/color][/size][size=2] RESSOURCE = proz.GetProcessList("IEXPLORE.EXE"); // Hier ermittel ich welche Ressource gewählt werden soll[/size] [size=2][color=#008000]//int RESSOURCE = 130; //130 = icon0.ico; 131 = icon1.ico; 132 = icon2.ico [/color][/size] [size=2]CString sTip(_T("IEXPLORE.EXE")); [/size] [size=2]NOTIFYICONDATA tnd;[/size] [size=2]tnd.cbSize = [/size][size=2][color=#0000ff]sizeof[/color][/size][size=2](NOTIFYICONDATA);[/size] [size=2]tnd.hWnd = m_hWnd;[/size] [size=2]tnd.uID = RESSOURCE;[/size] [size=2]tnd.uFlags = NIF_MESSAGE|NIF_ICON;[/size] [size=2]tnd.uCallbackMessage = MYWM_NOTIFYICON;[/size] [size=2]VERIFY( tnd.hIcon = LoadIcon(AfxGetInstanceHandle(), MAKEINTRESOURCE RESSOURCE)) );[/size] [size=2]tnd.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;[/size] [size=2]lstrcpyn(tnd.szTip, (LPCTSTR)sTip, [/size][size=2][color=#0000ff]sizeof[/color][/size][size=2](tnd.szTip)/[/size][size=2][color=#0000ff]sizeof[/color][/size][size=2](tnd.szTip[0]) ); [/size] [size=2][color=#0000ff]return[/color][/size][size=2] Shell_NotifyIcon(dwMessage, &tnd);} [/size]
Der Aufruf müsste dann folgendermassen aussehen.
Code :1
[size=2]TrayMessage(NIM_MODIFY);[/size]
Dabei tut sich leider gar nichts. Nur über die Kombinaton von entfernen und dann wieder adden geht es. Ist aber leider unbefriedigend.
Grüße
-
Hi ...
Wenn ich das richtig verstanden habe ändert sich der Wert von 'RESSOURCE' bei jedem Aufruf.
Ich glaube aber, du müsstes auch die gleiche uID angeben, wenn du ein Icon verändern willst, d.h. du könntest die uID einfach statisch auf z.B. 1 setzen, dann könnte es funktionieren ...
Gruß
Shai
-
15.02.05 14:47 #5
- Registriert seit
- Feb 2005
- Beiträge
- 45
Wow Herzlichen Dank
Du errettest mich aus einen 13 Arbeitsstündigen Try&Error-Marathon einer schlaflosen Nacht und ziemlich nervigen Erklärungsnöten. Jetzt mach auch das ganze Verhalten Sinn, weil die uId immer mit geändert worden ist.
Ähnliche Themen
-
[C#] Dynamisches Icon als Tray-Icon (NotifyIcon)
Von Fabsch im Forum .NET Windows FormsAntworten: 6Letzter Beitrag: 12.07.08, 13:59 -
Tray Icon
Von Marshallbbw im Forum JavaAntworten: 14Letzter Beitrag: 27.01.06, 15:48 -
Tray Icon
Von Fridulin im Forum .NET ArchivAntworten: 2Letzter Beitrag: 26.03.05, 14:16 -
Tray Icon in VB .NET
Von Vektor im Forum .NET ArchivAntworten: 4Letzter Beitrag: 22.03.05, 19:57 -
Tray Icon
Von mgd-one im Forum .NET ArchivAntworten: 6Letzter Beitrag: 09.02.04, 13:50





Zitieren
Login






