Zum Inhalt springen

Wie gemein... Kann man nicht in einer Dialogklasse auf die Doc-Klasse zugreifen ?


Alrik Fassbauer

Empfohlene Beiträge

Hallo, miteinander.

Ich will eine Variable der Doc-Klasse (äh...MFC) in einer Klasse eines Dialogfeldes auslesen.

Scheinbar scheint das aber nicht zu gehen ?!?

Jedenfalls behauptet der Compiler, er käme nicht an die Variabler heran, und das in mehreren Variationen:

- Er sagt, er kämme prinzipell in der Dialogklasse nicht an die Doc-Klasse heran: Als ob er die Klasse nicht kennen würde. Einen #include-Befehl ignoriert er scheinbar.

- Ein Objekt der Doc-Klasse kann scheinbar nicht erstellt werden, da es protected wäre (in der Header-Datei der Doc-Klasse). Ich weiß nicht, ob es ratsam wäre, diese Definition aus der "private"-Ecke in die "public"-Ecke zu verschieben... Ich schrecke davor zurück, da ich "unerwartete Seiteneffekte" (schöner Ausdruck ! > :)) befürchte.

Gibts da sonst noch einen Weg ?

(Der exakte Hintergrund ist ganz einfach der, daß ich einen Wert aus einer Tabelle in eine andere Tabelle, die in einem Dialogfeld angezeit wird, hineinbekommen will - egal, wie ! Nähere Infos zu dieser Problematik im Thema "2 Tabellen mit c doppelplus korellieren" im Bereich "Datenbankprogrammierung"))

MFG

Link zu diesem Kommentar
Auf anderen Seiten teilen

lololololOOOOLLL! Sorry, aber mit diesem Problemen habe ich nächte verbracht!

Also...du willst aus einer bloeden MFC-Klasse einen Variableninhalt in eine andere Klasse bekommen, richtig?

Also...warscheinlich ist die Variable protected, oder alle Variablen dieser von der MFC-generierten Klasse sind automatisch protected...wenn du also die Variable nicht auf public stellen kannst, bleibt dir die möglichkeit, die ich gewählt habe:

Du baust in die Doc-Klasse eine Funktion ein,die die besagt Variable als Returnwert zurückgibt. Das geht, weil die Funktion ja ein Teil der Doc-Klasse ist. Jetzt kannst du z.b. eine globale / normale main variable den Wert dieser Funktion(return var) zuweisen. Der Variablenwert ist nun aus der Doc draussen...du kannst den Spieß umdrehen und die Variable auch verändern, oder mit solchen Funktionen deinen Wert wieder in eine andere Klasse transferieren.

So, ich hoffe, das klingt nicht zu durcheinander und ich bete mal, dass ich dein Problem richtig gedeutet habe, viel Glueck :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hi,

also ich finde es keine so gute Idee in den MFC-Klassenquellen herumzuspielen.

Insbsondere wenn man nicht so genau weiss, was man tut.

Mein Vorschlag wäre über den Anwendungsassistenten keine dialogbasiertes

Anwendungstemplate zu erstellen, sondern

ein SDI-Projekt zu erstellen. Wenn du dann in Schritt 6 des Anwendungsasisstenten deine Viewklasse nicht von CView ableiten lässt, sondern auf CFormView umstellst, hast du fast den gleichen Effekten wie bei einer Dialoganwendung, mit dem Unterschied, daß

du gleich die Dokumentenklasse mit dabei hast.

Good Luck

Hoagie

:):)

Link zu diesem Kommentar
Auf anderen Seiten teilen

was? diese Idee habe ich mir aus sämtlichen Fachbüchern erlesen! *lacht*

Ne, im Ernst. Ich hasse die MFC. Es ist ein engstirniges System für Einsteiger. Wenn du einige Zeit damit verbringst, kommst du schon garnicht mehr ohne sie aus...weil es halt fuer alles eine Funktion gibt. Mein Tip: lasst die Finger von der MFC! Spätestens bei DIngen wie OpenGL oder etwas komplexeren Gebieten, die man nicht dem Programm anpassen kann, sondern wo man das Programm auf z.B. Opengl anpassen muss, stösst du ganz schnell an die grenzen dieses komischen MFC-Systems. Ok, es gibt auch z.B. OpenGl für MFC, aber das ist wieder so eingeschränkt aufgebaut und erlaubt schlecht Programmänderungen :(.

Ok, ich rede zuviel. Ich verzichte jedenfalls auf die MFC, weil ich mein Programm sehr gut alleine Klassen-und Objektorientiert erstellen kann(hoffentlich ;))

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich glaube, ich habe es zwischenzeitlich (und starken Verbrauch an Nerven) geschafft:

In der View-Klasse lese ich ein, schicke es zur Dialogklasse (von der ich ein Objekt erstellt habe), gehe anschließend in die Dialogklasse (d.h. der Dialog wird aufgerufen) und lese dort aus.

Ich hatte mal zwar eine Variable in der Doc-Klasse als "Zwischenspeicher" benutzt, aber es geht eigentlich auch so.

Einmal abgesehen davon bin ich erst noch in der Ausbildung, da kann ich schlecht erkennen, was guter Programmierstil ist und was nicht (naja, einmal abgesehen von ein paar Basics).

Link zu diesem Kommentar
Auf anderen Seiten teilen

Achso, du erstellst dein Dialog aus ner View-Klasse.

Viele Wege führen nach Rom, aber hier noch einmal ein Vorschlag um auf die Doc-Klasse (mittelbar) zuzugreifen.

In der Dialog Klasse erhällst du über GetParent ein Pointer auf das CWnd-Objekt von deiner View.

Mit ((CMyView*)GetParent())->GetDocument() etc.solltest du eigentlich Zugriff auf das

Dokumenten-Objekt erhalten.

Alternativ könntest du einen Zeiger auf die View in deine Dialog-Klasse einbauen und die in der View-Klasse mit this initialisieren.

Solong

Hoagi

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...