TrayIcon verschwindet bei "hover"



  • Hallo,

    ich habe ein kleines Programm geschrieben, das durch einen ButtonKlick in die SystemTray/Notification Area minimiert werden soll.
    Das anzeigen der Icons sowie das verstecken des Hauptfensters klappt.

    Mein Problem ist allerdings, dass beim "mouseover"/"hover" - oder wie auch immer man das jetzt genau nennt - das Icon sofort verschwindet.
    (Einmal hat er mir wenigstens kurz den ProgrammTitel (nicht szTip) angezeigt.

    Nachdem das Programm eigentlich durch doppelklick bzw. rechtsklick -> Menu wieder sichtbar gemacht werden soll, ist es natürlich schlecht, das das Icon verschwindet. Der Process (Taskmanager) bleibt bestehen. Und wenn ich das Programm mehrfach starte (es wird in InitInstance nur eine Instanz zugelassen) kommt es auch wieder zum vorschein.

    Die Frage ist, ob vielleicht jemand einen Tip hat, wo der Fehler liegen könnte. Ich habe schon länger gegoogelt, und dabei bin ich auf einen Eintrag gestossen, der schrieb, das das Icon verschwindet, wenn das Window-Handle in der NID-structure nicht richtig gesetzt ist. Welches WindowHandle brauch ich denn da bei einer SDI-Anwendung?

    Zum Code:
    Das Programm ist auf SDI mit Doc/View mittels MS Visual Studio 2005 aufgebaut.
    Das initialisieren des Icons:

    nid.cbSize=sizeof(NOTIFYICONDATA);
    nid.hWnd = ;
    nid.uID = IDI_ICON1;
    nid.dwInfoFlags = 0;
    nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
    nid.uCallbackMessage = MSG_ICONNOTIFY;
    _tcscpy_s(nid.szTip,64,"Zum Beenden doppelklicken\0");
    nid.hIcon = LoadIcon(IDI_ICON1);
    

    Das anzeigen des TrayIcon/Programmfensters in des App.cpp

    ToTrayAndBack()
    {
    	if (IsVisible){
    		m_pMainWnd->ShowWindow(SW_HIDE);
    		m_pMainWnd->UpdateWindow();
    		Shell_NotifyIcon(NIM_ADD, &nid);
    		IsVisible = !IsVisible;
    	} else {
    		m_pMainWnd->ShowWindow(SW_SHOW);
    		m_pMainWnd->UpdateWindow();
    		Shell_NotifyIcon(NIM_DELETE, &nid);
    		IsVisible = !IsVisible;
    	}
    }
    

    Die CALLBACK-Funktion für das MessageHandling steht in MainFrame.cpp, wird allerdings nie aufgerufen, bzw. das Icon verschwindet bevor ich klicken kann...

    Vielen Dank schonmal für jede Hilfe und jeden Ratschlag,
    Grüße Michael


  • Mod

    IMHO das Handle Deines Main Windows. (also Dein CMainFRame)
    Schau doch in den Code bei www.codeproject.com
    http://www.codeproject.com/shell/systemtray.asp


Anmelden zum Antworten