zeichnen im Dialogfenster



  • mach doch einfach ne Variable die du auf true setzt wenn
    der Button gedrückt wird, diese kannst du dann in der OnPaint-Methode
    abfragen und entweder zeichnen lassen oder nicht.

    NUR im OnButton zu zeichnen ist keine so gute idee, da die Zeichnung
    dann verschwindet sobald ein anderes Fenster überlappt oder dein Fenster
    minimiert wird.
    Wenn du den Dialog selbst anweisen willst die OnPaint auszuführen gibt es
    dafür die Funktion Invalidate();

    //edit: zu langsam gewesen *g*



  • 😃 😃
    Es läuft! Vielen Dank Windalf, für deine Geduld!! Weis selbst als Moderator von einen kleinen Mathe Forum, dass manche(ich sicherlich auch) ziemlich "schwierig" sein können. Aber am Ende kriegen wir´s doch hin:)

    Hier noch ein kleines Bild. Werd es aber noch ausbauen, denn da fehlt ein wenig Farbe.
    http://img146.echo.cx/img146/2108/bild12oy.png

    MfG
    Stefan



  • @Storm

    Das Bild entschädigt mich natürlich voll und ganz 😃

    Weis selbst als Moderator von einen kleinen Mathe Forum, dass manche(ich sicherlich auch) ziemlich "schwierig" sein können. Aber am Ende kriegen wir´s doch hin:)

    Nö ging doch gut. Ich muste keine Romane schreiben und du hast trotzdem verstanden was ich gepostet habe...

    Da treiben sich hier noch ganz andere Leute rum die erwarten würden das man Ihnen das ganze Programm schreibt. Würde mir dein Proggie aber auch mal ganz gerne Life angucken. Also wenn du Lust hast kannst du mir es gerne mailen...



  • Hi,

    ich denk mal das man mit dem Email Programm der Seite keine Anhänge mit versenden kann, oder? Wenn es nicht geht und du deine Adresse hier nicht veröffentlichen willst, dann schick deine Adresse an meine ??????

    Aber das mit dem alles haben gibt es auch in Mathe, "wer schön wenn mir einer die komplette Lösung per mail schicken könnte" 😡

    MfG
    Stefan



  • Ich hätte dann eine email von dir bekommen und zurückgeschickt. Editier deine mail lieber wieder raus sonst hast du 10 Spammails pro Tag mehr... 😉



  • Danke für den Antispamhinweis:)



  • Wie könnte dann ein derartiger Thread aussehen? Gibt es da gleich sowas wie ein
    AfxMessageBox oder so ähnlich?

    Nebenbei gab es bei dir während des startens eine Fehlermeldung? Irgend was mit der Berechtigung? Bei einen Freund startete das Programm nicht? Wenn ja wie hast du es zum laufen gebracht?



  • eventuell musst du noch fehlende dll's mitliefern. Welche sagt er dir dann ja beim Programmstart...

    Threadbeispiel hab ich mal eins erstellt weil die Frage hier so oft kam. Habs dir gemailt...



  • Hi,

    hab da mal noch ne Frage zu

    UINT CThreadexampleDlg::ThreadFunktion(LPVOID pParam)
    

    hasst du dies überall manuell eingetragen oder hast du da ein "Erstellungsprogramm" genutzt, denke da an das Einfügen einer Memberfunktion? Hab nämlich bis jetzt keinen Weg gefunden dies so zu erstellen, sonst würde ich dies halt überall manuell übernehmen.

    MfG
    Stefan



  • Habe es jetzt mal bei mir eingebaut, habe aber noch ein paar Probleme:

    void CFraktaleDlg::OnZeichnenButton() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    /*	UpdateData(true);
    	m_dlgBild.Invalidate();
    */
    	cancelflag=0;
    	AfxBeginThread(ThreadFunktion,this);
    }
    
    void CFraktaleDlg::OnAbbruchButton() 
    {
    	// TODO: Code für die Behandlungsroutine der Steuerelement-Benachrichtigung hier einfügen
    	cancelflag=1;
    }
    
    void CFraktaleDlg::Abbruchfunktion()
    {
    	int Kontrolle=0;
    	while(!cancelflag||Kontrolle!=1)
    	{
    		UpdateData(true);
    		Kontrolle=1;
    		m_dlgBild.Invalidate();
    	}
    }
    
    UINT CFraktaleDlg::ThreadFunktion(LPVOID pParam)
    {
    	CFraktaleDlg* pMeineKlasse=(CFraktaleDlg*)pParam;
    	pMeineKlasse->Abbruchfunktion();
    	return 0;
    }
    

    Bei der Abbruchfunktion musste ich in die while-Schleife irgend was einbauen, damit das Bild nicht immer und immer wieder gezeichent wird, deshalb die Variable Konstante. Blos beim ausführen des Programms gibt es einen kleinen Error. Wenn ich UpdateData(true) raus nehme klappt alles, auch mit den Abbrechen der while-Schleife blos ich kann dann an den Werten nix mehr verändern. Zudem muss ich trotzdem warten bis das Bild fertig gezeichent wurde, der Button Abbruch reagiert während des zeichnens nicht? Kann es daran liegen, dass der Code für das Zeichnen des Fraktals in der PAINT-Funktion von den anderen Fenster steht?

    EDIT:
    Ok, muss doch ein anderer Fehler sein, weil er bricht die Schleife ab, weil halt Kontrolle auf 1 gesetzt wurde und nicht cancelflag auf 1. 😞



  • hasst du dies überall manuell eingetragen oder hast du da ein "Erstellungsprogramm" genutzt, denke da an das Einfügen einer Memberfunktion? Hab nämlich bis jetzt keinen Weg gefunden dies so zu erstellen, sonst würde ich dies halt überall manuell übernehmen.

    Ja ist von Hand...

    An sonsten einen Fehler seh ich bei dir im Moment nicht. Vom Prinzip her würde ich in der Schleife die ständig rechnet und dann zeichnet einfach noch das flag bei jedem Durchlauf abfragen um dann ggf abzubrechen...



  • Das klappt leider auch nicht. Er rechnet erst das komplette Bild und testet dann erst wieder ob ich cancelflag=1 habe. In deinen geschickten Beispiel kann man es glaube damit simulieren, dass man statt sleep(500) mal sleep(5000) nimmt. Dann reagiert er auch nicht wenn man den Stop Button drückt, sondern wartet erst mal bis die Zeit um ist.

    Ich selbst dachte auch bei mir, wenn ich Abbrechen drücke, dass er keine weiteren Punkte malt.



  • kann ich dir so aus der ferne nicht sagen... müsstest du mir mal ggf das ganze Projekt schicken (wenn dann aber bitte ohne debug und release)... vielliecht bekomm ichs dann ja gebastelt...



  • Mal so nebenbei, hast du einen Buchtipp für MFC++, ich habe noch einen kleinen Büchergutschein bei mir liegen?


Anmelden zum Antworten