SystemTray
-
Hey,
Ich weiß, ich weiß.. es gibt 1000000 Theards dadrüber aber ich bin langsam am verzweifeln. Nix klappt.. gar nix -.-
Es gibt zwar eins was geklappt hat, bloß hab ich das Window nit mehr zurück bekomemn auch nicht mit der angegeben funktion..
ein anderes mal ging dat teil unten in den Tray bloß wenn man drüber fuhr mit der maus wars weg..Also ich benutze gerade den Soruce aus der Faq:
HANDLE hMainWindow;
hMainWindow = FindWindow("Form1",NULL);char szTip[64] = "Tray-Icon Tutorial"; //Exemplarisch
NOTIFYICONDATA nidTrayIcon;
nidTrayIcon.cbSize = sizeof(nidTrayIcon);
//nidTrayIcon.hIcon = hProgramIcon; //Exemplarisch
nidTrayIcon.hWnd = hMainWindow; //Exemplarisch, HWND des Fensters an dessen MessageLoop die Nachricht geschickt werden soll
nidTrayIcon.uCallbackMessage = (WM_USER + 1); //Exemplarisch
nidTrayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; //Exemplarisch
nidTrayIcon.uID = 0x0200; //Exemplarischstrcpy(nidTrayIcon.szTip, szTip);
nidTrayIcon.szTip[strlen(szTip)] = '\0';Shell_NotifyIcon(NIM_ADD, &nidTrayIcon);
das "nidTrayIcon.hIcon = hProgramIcon; " Musste ich auskommentieren weil ich kein Bild hatte und es so zu nem Error Kam..
hab jetzt eine .rc mit dem Inhalt angelegt:
#include "resources.h"IDI_ICON1 ICON DISCARDABLE "test.ico"
und dann eine resources.h mit:
#define IDI_ICON1 101Dann hab ich das mit dem Ressourcecompiler von Borland compilert und die .res bekomen
Die habe ich dem projekt hinzugefügt und die #include "resource.h"
included
dann hab ich noch
HANDLE hProgramIcon;
WNDCLASS wc;
wc.hIcon = LoadIcon (hProgramIcon, MAKEINTRESOURCE(IDI_ICON1));
Hinzugefügt und das kommentierte wieder weggemacht..Leider funktioniert immernoch gar nix
Der Code sieht insgesamt nun so aus:HANDLE hMainWindow; HANDLE hProgramIcon; WNDCLASS wc; wc.hIcon = LoadIcon (hProgramIcon, MAKEINTRESOURCE(IDI_ICON1)); hMainWindow = FindWindow("Form1",NULL); char szTip[64] = "Tray-Icon Tutorial"; //Exemplarisch NOTIFYICONDATA nidTrayIcon; nidTrayIcon.cbSize = sizeof(nidTrayIcon); nidTrayIcon.hIcon = hProgramIcon; nidTrayIcon.hWnd = hMainWindow; nidTrayIcon.uCallbackMessage = (WM_USER + 1); nidTrayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nidTrayIcon.uID = 0x0200; strcpy(nidTrayIcon.szTip, szTip); nidTrayIcon.szTip[strlen(szTip)] = '\0'; Shell_NotifyIcon(NIM_ADD, &nidTrayIcon);Das hab ich halt in nen Buttonklick gemacht..
Bloß es passiert gar nix.
-
Wenn Windows das Programm wieder beendet hat verschwindet das Tray Icon nicht sofort sondern erst wenn du mit der Maus darüber fährst.

Also überprüfe deinen Code ob du nicht zufällig das Tray Icon setzt und dann gleich wieder beendest hast. setze Debugger breakpoint oder baue in den Code DebugBreak(); ein um ein Beenden zu verhindern und um zu überprüfen warum dein Programm wieder beendet wird.

Wenn du etwas Funktionierendes Tray Icon brauchst - suche dir im Codeproject.com ein snippet ( dort gibt's ein funktionierendes Beispiel mit vollständigem Code ...)
MfG
Sönke