Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

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

Empfohlene Antworten

Veröffentlicht

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

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 :)

Die Funktion sollte von ausserhalb der Klasse zugänglich sein, also auf public stellen.

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

:):)

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 ;))

  • Autor

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).

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.