Verständnisfrage zu WM_INITDIALOG



  • Hallo zusammen,

    ich habe eine Dialogbox programmiert, muss aber feststellen, dass Variablen ihren Wert verlieren, wenn sie für die Dialogbox definiert sind und bei WM_INITDIALOG einen Wert zugewiesen bekommen.
    Mein Code sieht so aus (auszugsweise):

    LRESULT CALLBACK ERDE (HWND hwnddlg1, UINT message, UINT wParam, LONG lParam)
    {
    
    int iHilf;
    char szHilf[100];
    
    switch (message)
    {
    case WM_CLOSE:
        sprintf(szHilf,"iHilf hat den Wert: %d",iHilf);
        MessageBox(NULL,szHilf,"",MB_OK);
        EndDialog(hwnddlg1,1);return TRUE;
    case WM_INITDIALOG:
        iHilf=451;
        sprintf(szHilf,"iHilf hat den Wert: %d",iHilf);
        MessageBox(NULL,szHilf,"",MB_OK);
        return TRUE;
    
    case WM_COMMAND:
        switch (wParam)
        {
    
    return TRUE;
    break;
    
    } // switch (wParam)
    } // switch (message)
    return FALSE ;
    }
    

    Bei WM_INITDIALOG besitzt iHilf den Wert 451, bei WM_CLOSE und innerhalb der Dialogbox ist der Wert allerdings undefiniert (Irgendein Zufallswert). Ist die Variable allerdings global definiert, behält sie ihren Wert. Warum wird die Variable iHilf, die innerhalb der Dialogbox definiert ist, nach WM_INITDIALOG "resetet"? Das ist doch vollkommen unlogisch! Ich könnte zwar schreiben:

    int iHilf=451;
    

    , aber wenn z.B. der Inhalt einer Datei, eine Funktion z.B. das aktuelle Datum, Uhrzeit etc. beim Start der Dialogbox ausgelesen werden soll, komme ich doch um eine Wertzuweisung innerhalb WM_INITDIALOG nicht herum, oder? Ich könnte die Variable global definieren, aber dass soll doch nicht Sinn der Sache sein?
    Habe ich den Sinn von WM_INITDIALOG nicht verstanden? Wie gehe ich vor, wenn ich z.B. beim Start der Dialogbox das aktuelle Datum in einer lokalen Variablen ablegen möchte?

    Vorab Danke für Tipps.

    Gruß,
    Andreas



  • Weil iHilf innerhalb der Funktion ERDE() initialisiert wird und ERDE() und alles was darin war nach return futsch ist 😉

    Du müsstest iHilf außerhalb von ERDE definieren oder alternativ static verwenden


Anmelden zum Antworten