2 anfängerfragen zu mfc



  • Hallo,
    ich benutze Microsoft Visual C++ 6. und bin wirklich blutiger Anfänger 😃

    Problem 1:
    Die Funktion meines Start-Buttons sieht ungefähr so aus:

    void programmname::OnStart()
    {
       for(int a=0;a<100000;++a)
       {
         //irgendwas machen
       }
    }
    

    Kann ich jetzt irgendwie über einen Abbruchbutton diese Schleife beenden?

    Problem 2:
    In der .cpp Datei meines MFC Programms sind ja die Funktionen wie zB. OnStart() aufgeführt. Allerdings werden diese ja nur dann ausgeführt, wenn der dazugehörige Button auch wirklich gedrückt wurde.
    Kann ich irgendwelche Aktionen schon beim Programmstart ausführen lassen?
    Konkret möchte ich, dass beim Programmstart eine Editbox mit Text gefüllt wird.



  • Für das 1. Probem habe ich jetzt schon eine lösung gefunden:

    int test=1;
    
    void programmname::OnStart()
    {
       for(int a=0;a<100000;++a)
       {
         //irgendwas machen
         if(test==0)
         break;
       }
    }
    
    void programmname::OnAbbrechen()
    {
       test=0;
    }
    

    Ist zwar nicht besonders schön aber funktioniert 😃

    Hat jemand noch eine idee zum 2. Problem?



  • edit:
    es funktioniert natürlich nicht, da - wenn ich versuche auf das fenster zuzugreifen - während die schleife läuft, die Meldung "Keine Rückmeldung" erscheint 😞



  • zu Problem 1:
    gibt es wie immer mehrere Lösungen, entweder du nimmst diene Schleife und führst

    MSG msg;
    
    while( ::PeekMessage( &msg, NULL, NULL, NULL, PM_NOREMOVE ) )
      ::AfxGetThread()->PumpMessage();
    

    in der Schleife aus. Oder du Erstellst einen Workerthread, den du bei belieben beenden kannst oder Du benutzt einen Timer und führst im Timer die Aufgaben der Schleife aus.

    zu Problem 2:

    kommt darauf an was dür ein Projekt Du erzeugt hast Dialog oder MDI/SDI

    Gruß Matthias



  • Mein Projekt ist ein Dialog.
    Problem 2 ist behoben (es gibt eine OnInitDialog() Funktion)

    Zu Problem 1:
    Ich fürchte es liegt an Folgendem:
    Die Funktion OnStart enthält viele Sleep() anweisungen, die dann wahrscheinlich den "Keine Rückmeldung" Fehler erzeugen.

    Gibt es eine Möglichkeit das Programm kurz anzuhalten ohne die Kontrolle über das Programm zu verlieren?



  • jo, bastel meine Peek- Pump-Message schleife mit deiner Sleep zusammen, oder benutze einen Thread.

    Gruß Matthias


Log in to reply