Keine Anzeige im EDIT-Feld



  • Hi,

    bin blutiger C++ Anfänger und habe bereits Probleme mit den einfachsten Gegebenheiten:

    Folgender Code:

    CString text;
    CEdit* pEdit = (CEdit*) GetDlgItem(IDC_EDIT1);
    for (int i=1;i<20;i++)
    {
    UpdateData(true);
    text.Format("Die laufende Nummer ist:%i", i);
    UpdateData(true);
    pEdit->SetWindowText(text);
    Sleep(100);
    }
    Das problem ist, dass während des Schleifendurchlauf keine Anzeige im EDIT-Feld erscheint, erst nach beenden der Schleife wird der Endwert angezeigt. Habe schon an allen möglichen und unmöglichen Stellen mit UpdateDate experimentiert -> kein Erfolg.



  • Wohin mit meiner Frage?

    ich verscheibe den thread mal ins MFC Forum



  • Hallo !

    Probier mal das aus:

    CString text;
    CEdit* pEdit = (CEdit*) GetDlgItem(IDC_EDIT1); 
    for (int i=1;i<20;i++)
    {
    UpdateData(true);
    text.Format("Die laufende Nummer ist:%i", i);
    UpdateData(true);
    pEdit->SetWindowText(text);
    pEdit->RedrawWindow(NULL,NULL,RDW_UPDATENOW);    // Editfeld neu zeichnen
    Sleep(100);
    }
    

    Tschüss

    [edit]
    Geht übrigens auch so:

    CString text;
    CEdit* pEdit = (CEdit*) GetDlgItem(IDC_EDIT1);
    for (int i=1;i<20;i++)
    {
    //  UpdateData(true);
        text.Format("Die laufende Nummer ist:%i", i);
    //  UpdateData(true);
        pEdit->SetWindowText(text);
        pEdit->RedrawWindow(NULL,NULL,RDW_UPDATENOW);    // Editfeld neu zeichnen
        Sleep(100);
    }
    

    [/edit]

    [ Dieser Beitrag wurde am 16.08.2002 um 15:24 Uhr von isabeau editiert. ]



  • Hi isabeau ,

    habe den Deinen CODE ausprobiert und es funktioniert!
    Vieleicht kannst Du mir noch Mitteilen wo soetwas steht. Ich habe zwar 10 C++ Bücher, ab keines behandel so ein Thema.

    Vielen Dank

    Walter



  • Öhmm,... keine Ahnung, wo solche Sachen erklärt werden. Ich gucke mir das Meiste von anderen Programmen ab (FreeSource).
    Des weiteren kann man sich ja auch mal einen Tipp aus diesem Forum holen...



  • Original erstellt von <edvmesstec>:
    **Hi isabeau ,

    habe den Deinen CODE ausprobiert und es funktioniert!
    Vieleicht kannst Du mir noch Mitteilen wo soetwas steht. Ich habe zwar 10 C++ Bücher, ab keines behandel so ein Thema.

    Vielen Dank

    Walter**

    Dein Problem hat nicht unbedingt viel mit einem C++ Buch zu tun.
    Es beruht eher auf der Arbeit der Betriebssysteme im allgemeinen. In deinem oben aufgeführten Beispiel gibst du deinen Hauptprozess (dein erstelltes Programm) nicht die Schanze die Anzeige zu aktualisieren. Du rufst zwar die Update Methode auf, aber diese aktualisiert nur die Daten nicht das Erscheiungsbild des Fensters. Mit Sleep legst du den gesamten Prozess schlafen und blockierst somit ebenfalls eine Aktualisierung. Eine elegantere Methode ist da sicherlich die Verwendung von Threads, welche Paralles arbeiten, und somit die Aktualisierung des Fensters nicht blockieren. Wenn du tiefgründiger in die Arbeitsweise schauen willst, dann schau die mal die Verteilung der CPU-Zeit bei Programmen an. (Zur besseren Verständlichkeit solltest du mal versuchen das Sleep grösser zu definieren und dann die Lösung von isabeau (die auf deine Frage völlig O.K. ist ) Testen. Du wirst bemerken, dass das Fenster während der Ausführung der Sleep-Funktion blockiert wird.)


Anmelden zum Antworten