OnDraw Aktualisierung
-
Hallo,
Ich bin derzeit dabei ein Mfc Programm zu schreiben, welches mir einen Graphen in der Viewklasse darstellt. Dazu benutzte ich die OnDraw() Funktion.
Nun Bin ich auf folgendes Problem gestoßen:
Jedes mal sobald ich das Windowsfenster, also das laufende Programm verschiebe, verkleinere, oder vergrößere zeichnet mir der Wizardcode von MFC eine neue View mit neuen RndWerten. (Der Graph hängt von Wahrscheinlichkeiten ab)
Das gleiche passiert wenn ich links oben auf das Symbol für "neu" klicke, was jedoch ein recht praktisches Feature ist.Ist das deaktivierbar dass immer wieder eine neue View geöffnet wird wenn das Fenster bzw. die größe des Fensters verändert wird?
Ist leider mein erstes Projekt mit MFC und da fehlt mir noch der Durchblick
MfG
-
OnDraw zeichnet nur. Es ist doch gewollt das Deine Ansicht zum Fenster paßt.
Du darfst die Daten nicht in der View Klasse gar beim Zeichnen generieren, dafür ist die Documentklasse da.
-
Okay, Wie genau ist dann der Aufbau?
Ich benutze die Doc::OnNewDocument() um meine Daten zu verarbeiten bzw zu berechnen.
Wenn ich alle Daten habe, erstelle ich eine View Instanz und übergebe die Daten der OnDraw() Funktion, um sie dort dann zu zeichnen?
-
Ich weiß nicht ob ich das nun richtig angestellt habe, aber es funktioniert^^
Ich verarbeite die Daten jetzt in OnNewDocument() und greife dann letztenendes in der View mit pDoc auf eine eigene Funktion in der Doc zu um an die Werte zu kommen.Danke
-
Schon der richtige Weg, aber OnNewDocument baut ein neues Document welches Du dann anzeigst. Um das Document jedoch zu ändern, mußt Du noch Funktionen für den Zweck bauen.
Um was geht es eigentlich ein SDI oder ein MDI Projekt?
-
Ziel ist es einfach einen Graphen mit Kanten und Ecken anzuzeigen der anhand eines Algorithmus aufgebaut wird.
Im Moment klappt alles wie ich mir das vorstelle, ich kann meherere Tabs öffnen(Ich glaube das macht es mein Prog zu MDI), und bei jedem Tab wird mein Algo neu durchlaufen sodass ein andere Graph rauskommt. Beim Verschieben/Vergrößern/Verkleinern/Maximieren des Fensters bleibt der Graph gleichAber wenn wir gerade dabei sind, der Wizard hat mir kein Schließen Minimieren und Maximierensymbol oben rechts kreiert. Wo im Code kann ich das nachträglich aktivieren.
Im Moment kann ich das Programm nur über "Datei" -> "Beenden" schließen, das nervt ein wenig
-
Schau dir das hier mal an:
http://www.cpp-tutor.de/mfc/mfc/kap4/lektion6.htm
Das Zauberwort heißt Dokument-Ansichts-Trennung und ist die Basis der MFC. Wie schon andreasgeorg geschrieben hat werden werden die Daten in deiner Doc-Klasse gehalten und ggf. auch neu berechnet. Von dort aus gibst du deiner View-Klasse die Mitteilung, bei Änderungen den Fensterinhalt neu zu zeichen. Das macht die auch automatisch wenn du z.B. die Größe änderst oder z.B. ein anderes Fenster schließt was gerade dein Programmfenster verdeckt hat.
-
Schau Dir in OnInitInstance
pMainFrame->LoadFrame(IDR_MAINFRAME)
an. Dort kannst Du als zweiten Parameter die Styles angeben die Du möchtest.
pMainFrame->LoadFrame(IDR_MAINFRAME, WS_OVERLAPPED | WS_CAPTION | WS_MAXIMIZE | WS_SYSMENU)
-
Danke euch für die Antworten, habs nun hinbekommen mit ein wenig rumgesuche