Programmabsturz bei ShowWindow()



  • Ich möchte mein Programm in die Tray verschieben. Die machte ich wie in der FAQ beschrieben ([url] SysTray-Icon [/url]). Jedoch stürtst mein Programm bei der ShowWindow(SW_HIDE) Funktion ab.
    Weiß jemand was ich falsch gemacht habe???
    Hier 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); //IDI_MIN ist das Icon was angezeigt wird
            tnd.szTip[64]='';
            lstrcpyn(tnd.szTip,"Proggname",sizeof(tnd.szTip));
            Shell_NotifyIcon(NIM_ADD,&tnd);
            ShowWindow(SW_HIDE);
    


  • Dein Programm ist nicht dialogbasiert?

    Devil



  • Hallo, schwer zu sagen, kann es sein, daß das Fenster noch garnicht existiert (Ist das WindowHandle gültig)?



  • Jo, würde ich auch tippen ... Wo steht denn der Code?



  • @Devil81:
    Es ist ein Dialogfeldbasierende Programm.
    @mathi & dEUs:
    Er wird beim drücken eines Buttons ausgeführt (Das Fenster ist also schon vorhanden).



  • 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); //IDI_MIN ist das Icon was angezeigt wird
        tnd.szTip[64]='\0';
        lstrcpyn(tnd.szTip,"Music Maker",sizeof(tnd.szTip));
        Shell_NotifyIcon(NIM_ADD,&tnd);
        ShowWindow(SW_HIDE);
    

    Also dieser Code funzt bei mir perfekt.
    Bist du sicher das es an ShowWindow liegt?
    Und nicht an etwas anderem?

    Devil



  • Ja. Ich habe das Programm Debuggt und da kam dan der gelbe Pfeil vor der definition von ShowWindow.
    Du kannst mein Programm gerne mal ansehen:
    Code

    [ Dieser Beitrag wurde am 12.08.2002 um 20:29 Uhr von Fink Christoph editiert. ]

    EDIT:
    Nur den Link klickbar gemacht 🙂

    [ Dieser Beitrag wurde am 12.08.2002 um 20:38 Uhr von dEUs editiert. ]



  • Hmm ...
    Bei dem Code, den du hochgeladen hast, hats nur win WM_MINIMIZE, kein WM_HIDE ... Und was genau meinst du mit Absturz? Bei mir hängt das Programm einfach wegen dieser do-while-Schleife, es stürzt aber nicht ab ...



  • Bei mir stürtzt er bei der ShowWindow Funktion ab:
    Hier der Error http://members.vol.at/captainiglo/Error.jpg



  • Der entscheidende Fehler ist hier:
    tnd.szTip[64]='\0';

    Der String selbst ist doch nur 64 lang. Da darf man doch nicht an die 65te Stelle schreiben.
    Es muss also heißen:

    tnd.szTip[63]='\0';



  • Laut der Fehlermeldung existiert dein Fenster nicht!
    In der angegebenen Zeile steht nämlich:
    ASSERT(::IsWindow(m_hWnd));
    Kompilier mal den hochgeladenen Code, vielleicht sind ja noch mehr Sachen anders, als nur dieser eine Parameter von ShowWindow ...



  • Danke thomas80d. Das wars. Jetzt funzt alles problemlos.



  • Hallo Moderatoren,

    denkt ihr bitte auch dran, den Beitrag in der FAQ von diesem Fehler zu befreien?


Anmelden zum Antworten