Problem beim Zeichnen von Objekten
-
Ich habe ein kleines Grafikprogramm erstellt, bei dem man per Dialogen einige Geometrische Figuren zeichnen kann. Das Zeichnen selbst hab ich in die View.cpp gepackt, und dann nochmal in die OnDraw Funktion, damit sie auch beim Neuzeichnen des Fensters da bleiben. Das klappt auch alles wunderbar.
Nur leider bleiben die gezeichneten Sachen so auch vorhanden wenn ich auf Neues Dokument clicke. Speichern und Laden kann ich sie leider auch nicht. Habe ich was falsch gemacht oder vergessen?
Ich wäre für jede Hilfe sehr dankbar!
Edit: Ok, wenn ich in die OnInitialUpdate Funktion meine Variablen auf 0 setze, sind die Figuren nicht mehr da wenn ich auf Neu clicke. Das Speichern scheint aber nicht zu klappen. Wie speichere ich denn Strings und ints, die lokal in einer Datei erstellt wurden?
Lina
-
Wie hast Du denn die Variablen deklarert? Global?
In der MFC gehören die Daten nicht in den View sndern in das Document. Schau Dir das Scribble Sample an.
http://msdn2.microsoft.com/en-us/library/aa716528(VS.60).aspx
-
Ich hab die Variablen in der View Datei global definiert. Wie kann ich denn auf die Variablen in anderen Dateien zugreifen? Brauche ich dafür Zeiger, oder klappt das mit Funktionen einer Klasse?
Vielen Dank für den Link, Scribble sehe ich mir nachher mal an. Ich würde mich sehr über weitere Antworten freuen.
Lina
-
Wenn Sie dort global sind, sind sieim gesamten Projekt Global, dann gibt es nur einen Wertesatz.
Lerne erstmal die Grundzüge von C++ und Objekten und von Member Variablen bevor Du weiterfragst...
Scribble kann Dir jetzt helfen zu verstehen!
-
Tut mir leid wenn ich schon wieder frage! Ich verstehe das so: um eine Variable aus der Doc Datei in die View Datei zu bekommen, brauche ich die Funktion GetDocument();. Umgekehrt brauche ich die Funktion POSITION pos = GetFirstViewPosition(); CMyView* pView = dynamic_cast<CMyView *>(GetNextView(pos));
Wie genau implementiere ich das aber? Also angenommen ich habe eine Variable in der View Datei erschaffen, wie greife ich dann auf sie in der Doc Datei zu?z.B.:
View Datei:
int i = 0;
void CView::Aktion()
{
i=1;
}Doc Datei:
int i2=0;
void CDoc::Frage()
{
if (i==1)
{i2=1;}
}Ich arbeite mich auch gerade etwas durch das Scribble, ist aber auch nicht so einfach. Es wäre wirklich sehr lieb, wenn mir hier noch jemand einen guten Tipp geben könnte!
Lina
-
Es gehört sich nicht eine Variable im View zu haben, die das Document braucht. Das ist ein Design Fehler.
Ein Dokument kann mehrere Views haben...Wenn das Dokument Daten aus dem View bekommen möchte, dan kann es UpdateAllViews benutzen (wie ich schon schrieb) und damit auch Daten abfordern. Load/Commit Befehle nutt man hier genre wenn man Formviews hat.
-
Um auch die Frage zu klären.
Willst du 2 Zeichnungen haben dann brauchst du nicht SDI sonderen MDI.
Dann gibt es auch auch 2 DOCS.
Die Daten sollten immer im DOC sein. Bei einem SDI kannst du von einem DOC unterschiedliche VIEWS erstellen. Du kannst aber kein weiteres DOC erstellen da es eben SingleDOC und nicht MultiDOC ist.
-
Ok, dann eben einfach das Beispiel von oben umdrehen! Wie bekomme ich die Dateien von der Doc in die View Datei?
z.B.:
Doc Datei:int i = 0;
void CDoc::Aktion()
{
i=1;
}View Datei:
int i2=0;
void CView::Frage()
{
if (i==1)
{i2=1;}
}
-
Indem man über den Document Zeiger auf die Daten zugreift.
void CMyView::AnyViewFunction() { GetDocument()->m_anyData = m_otherAnyDataFromView; }