Ausgabe von Benutzer-Infos auf ein CEdit Feld!?!



  • Hallo,

    Überschrift hört sich vielleicht etwas komisch an, ich weis aber nicht wie ich mein Prob. nennen soll. Desshalb hats auch schlecht mit der Suchen-Funktion geklappt 🙄

    Zum Wesentlichen:

    Hab so ne Init funktion die macht halt was, zwischendurch will ich immer mal wieder was an ein CEdit Control senden, um den User auf dem Laufenden zu halten.

    Diese Init Funktion wird beim Erzeugen des Dialoges gestartet und das Ganze sieht dann folgendermaßen aus:

    OnIniDialog()
    {
    
    zeugs
    .
    .
    .
    
    // Message die, die Init-Fkt aufruft
    PostMessage(WM_ONINIT);
    
    return true;
    }
    
    LPRESULT OnInit()
    {
      Sleep(500); // Geben wir dem Dialog mal ne 1/2 Sekunde
                  // Zeit um sich vollständig zu zeichen
    
      MyInit();
    }
    
    void MyInit()
    {
    // Hier erfolgen nun also, nachdem der Dialog kreiert, ist ein
    // Paar Initialisierungsgeschichten
    
    .
    .
    . tu dies...
    
    // Info an User
    ShowUserInfos("hab die gemacht...");
    
    .
    .
    . tu das....
    
    // Info an User
    ShowUserInfos("hab das gemacht...");
    
    .
    .
    .
    }
    
    void ShowUserInfos(CString str)
    {
      // P.s. vielleicht gibt es hierfür ne intelligentere Lösung?
      // Ich habs mal so gemacht. Sinn ist bloß Das der bereits vorhandene
      // Inhalt nicht überschrieben wird
      CString tmp;
      GetDlgItem(IDC_INFO_EDIT)->GetWindowText(tmp); 
    
      tmp += str;
      tmp += "\n";
    
      // Und der komplette string wird auf das Edit Element rausgeschrieben
      GetDlgItem(IDC_INFO_EDIT)->SetWindowText(tmp);
    }
    

    Fertig! Sollte meiner Logik nach auch laufen. Tut's aber nicht. 😞
    Stattdessen werden alle Infos erst dann angezeigt (und zwar alle auf einmal), nachdem die komplette Init-Funktion abgeschlossen ist (dauert ca. 1 Minute).

    Wo liegt denn hier der Fehler? Denn nach jedem GetDlgItem(IDC_INFO_EDIT)->SetWindowText(tmp) sollte es doch direkt sichtbar sein auf dem Edit Feld, oder? Ein UpdateData ist hier auch nicht nötig da ja keine Variable zum Edit Feld gekoppelt ist.

    Hab schon versucht das die ShowUserInfos als eine WindowMessage zu handhaben, macht aber keinen Unterschied... 😞



  • Wenn dein Programm hier ankommt:
    PostMessage(WM_ONINIT);
    macht es danach hier weiter:
    LPRESULT OnInit()
    und kommt zu
    Sleep(500);
    Das hier:
    // Geben wir dem Dialog mal ne 1/2 Sekunde
    // Zeit um sich vollständig zu zeichen
    ist falsch, denn das Programm ist jetzt eben bei Sleep und macht nix anderes. Auch keine Dialoge zeichnen oder sonstwas. Und dann geht es nach der halben Sekunde hier weiter:
    void MyInit()
    Das Programm "tut dies" und "tut das", zeigt nacheinander die Benutzer-Infos (auf dem nicht vorhandenen Dialog) an und wenn
    void MyInit()
    fertig abgearbeitet ist, kehrt das Programm zurück zu dem entsprechenden Aufruf
    MyInit();
    und macht dahinter weiter. Hoppla, da ist ja gar nix mehr,... LPRESULT OnInit() ist also fertig abgearbeitet, also geht es auch hier zurück zu dem entsprechenden Aufruf und das ist
    PostMessage(WM_ONINIT);
    "So, diese Zeile ist auch fertig abgearbeitet" denkt sich das Programm und macht nach diesem Aufruf weiter. Es kommt zu
    return true;
    und ist mit OnIniDialog() auch fertig und findet nun endlich Zeit, den Dialog zu zeichnen.
    Statt PostMessage(WM_ONINIT); könntest du einen Timer oder einen Thread starten, der nach einiger Zeit genau diese Nachricht sendet.

    Hier nur zwei von vielen:
    http://www.c-plusplus.net/forum/viewtopic.php?t=90721&highlight=timer+oninitdialog
    http://www.c-plusplus.net/forum/viewtopic.php?t=93994&highlight=timer+oninitdialog

    P.S.:
    Ja, ich habe nix zu tun. So kurz vor dem Urlaub... 😃 *freu*



  • hmmm,
    dachte genau dafür wär PostMessage gut. Das eben nicht auf eine Abarbeitung gewartet wird sondern das Prog. fortfährt. Egal, Thread hört sich auch gut an. Danke!

    P.s. Urlaub, das will ich auch haben... 😡



  • feisX schrieb:

    dachte genau dafür wär PostMessage gut.

    Könnte natürlich auch sein, dass ich mich komplett irre.

    feisX schrieb:

    P.s. Urlaub, das will ich auch haben... 😡

    P.P.S.: ich: 3 Wochen -> 😃 😃 😃


Anmelden zum Antworten