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"));


Log in to reply