Ändern der Daten einer Ansicht aus einem Dialog
-
Hallo Leute,
ich weis, einige werden sagen, dass diese Problem hier schon mehrmals erörtert wurde, dennoch finde ich keine Lösung (vermutlich Verständnisproblem):
Ich ahbe eine SDI-Ansicht! Aus dieser ich öffne ich einen Dialog, der Daten aus der Asnicht ändern soll (bzw. Funktionen aufrufen), ohne dass ich den Dialog schließe!
Ich habe folgenden Ansatz:
In der Ansicht öffne ich den Dialog und übergebe einen Zeigers auf die Ansicht an den DialogCGraphView *pView=this; CMassstab dlg; dlg.SetzZeigeraufAnsicht(pView); dlg.DoModal();
im Dialog mach ich Folgendes:
void CMassstab::SetzZeigeraufAnsicht(CWnd * bla) { m_ZeigeraufAnsicht=bla; }
Leider kann ich aber nicht auf eigene Variablen der Klasse CGraphView zugreifen! Ich würde es ja gerne explizit casten auf folgende Weise:
void CMassstab::SetzZeigeraufAnsicht(CWnd * bla) { m_ZeigeraufAnsicht=(CGraphView *)bla; }
Da kommt aber folgender Fehler bei Übersetzen:
C:\Holger\TEST\graph\Massstab.cpp(94) : error C2065: 'CGraphView' : nichtdeklarierter Bezeichner
Ich denke mir, logisch die Klasse CMassstab kennt die Klasse CGraphView nicht, also flink in die Massstab.cpp folgendes eingetragen:
#include "graphView.h"
Nach diesem Eintrag tauchen aber Fehler in der graphView.h auf, die sonst nicht da sind!
Mache ich irgedetwas verkehrt, oder ist der Einsatz schon verkehrt
-
Liegt wahrscheinlich daran, dass die "graphView.h" auf andere Klassen zugreift, die ihr dann an dieser Stelle nicht bekannt sind. (z.B. auf CgraphDoc ?)
Also schreib mal vor das
[cpp]#include "graphView.h"[/cpp]
noch ein
[cpp]#include "graphDoc.h"[/cpp]
Ist sicher nicht die schönste Lösung, sich so nach und nach durch alle includes zu hangeln, ich hab das Problem aber so immer gelöst. Wenn jemand eine bessere Lösung weiß, immer her damit!
Gruß Brainiac
PS: Ansonsten wär es hilfreich wenn du die Fehlermeldungen posten würdest, dann kann man dir besser helfen!
-
Hi,
IMHO geht das deswegen nicht, weil CView eine Runtime_Class ist.
Ich würds folgendermaßen probieren:GetParent()->SendMessage(...);
Oder:
GetParent()->PostMessage(...);
Voraussetzung: Dein Dialog hat ist WS_CHILD
Dann brauchst du den ganzen Kram mit Pointern nicht machen, weil dir GetParent() sowieso direkt den richtigen liefert.Grüße Squeegee