tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
1128
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    derfragende79 derfragende79 ist offline Mitglied Bronze
    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
     

  2. #2
    Avatar von Endurion
    Endurion Endurion ist offline Mitglied Diamant
    Registriert seit
    Apr 2004
    Beiträge
    2.151
    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.
     

  3. #3
    derfragende79 derfragende79 ist offline Mitglied Bronze
    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
     

  4. #4
    Shaijan Shaijan ist offline Mitglied Silber
    Registriert seit
    Mar 2004
    Beiträge
    57
    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
     

  5. #5
    derfragende79 derfragende79 ist offline Mitglied Bronze
    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

  1. [C#] Dynamisches Icon als Tray-Icon (NotifyIcon)
    Von Fabsch im Forum .NET Windows Forms
    Antworten: 6
    Letzter Beitrag: 12.07.08, 13:59
  2. Tray Icon
    Von Marshallbbw im Forum Java
    Antworten: 14
    Letzter Beitrag: 27.01.06, 15:48
  3. Tray Icon
    Von Fridulin im Forum .NET Archiv
    Antworten: 2
    Letzter Beitrag: 26.03.05, 14:16
  4. Tray Icon in VB .NET
    Von Vektor im Forum .NET Archiv
    Antworten: 4
    Letzter Beitrag: 22.03.05, 19:57
  5. Tray Icon
    Von mgd-one im Forum .NET Archiv
    Antworten: 6
    Letzter Beitrag: 09.02.04, 13:50