TrayIcon und Beschreibung in der FAQ
-
Also bei mir ist dort ein Fehler aufgetreten und zwar lautet der Code :
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(IDR_MAINFRAME),IMAGE_ICON, 16,16,LR_SHARED|LR_DEFAULTCOLOR); tnd.szTip[64]='\0'; lstrcpyn(tnd.szTip,"KMANChatClient",sizeof(tnd.szTip)); Shell_NotifyIcon(NIM_ADD,&tnd); ShowWindow(SW_HIDE);
Das funtz auch so weit, bis auf eine Zeile und zwar
ShowWindow(SW_HIDE);
Hierbei wirft er mir, wenn ich das Programm gestartet habe, und diesen Programteil aufrufe einen Fehler aus.
Woran kann dias liegen ???
-
So es funktioniert, wenn ich die Anweisung nach ganz oben verschiebe und als aller erstes ausführe.
Aber warum ??? Warum funtz es net, wenn sie ganz unten steht ???
-
Was hast du für ne Anwendung??
SDI / MDI ??
Dialog??gib sonst mal restlichen Quellcode oder so
-
Eine Dialog Basiierte Anwendung !
Und dieser Teil liegt einfach in einer Funktion die ich durch ein Menu aufrufe !
-
Was ist das hier:
-> tnd.szTip[64]='\0'; ???
-
Achja, und was soll das hier:
-> lstrcpyn(tnd.szTip,"KMANChatClient",sizeof(tnd.szTip)); ???Ich stelle fest:
Fehler in 2 Zeilen, also überdenk Deinen Code nochmals !
-
Ich seh nur einen Fehler:
tnd.szTip[64]='\0';szTip ist nur 64 Byte lang und es wird auf eine ungültige Speicherstelle zugegriffen.
@RenéG: Der Code steht so falsch in der FAQ drin. Sollte unbedingt mal geändert werden.
-
@thomas80d
lstrcpyn(tnd.szTip,"KMANChatClient",sizeof(tnd.szTip));ist deshalb ein Fehler, weil "KMANChatClient" keine 64Byte lang ist. Ok, das funktioniert, da dieser String nicht am Ende des Programm-Heaps steht. Sollte dies der Fall sein, würde lstrcpyn auf nicht zur Verfügung stehende Speicherstellen zugreifen und abstürzen.
Richtig wäre:
_tcscpy( tnd.szTip, _T("KMANChatClient"));