Variable aus CMainFrame in anderer Klasse verwenden

PascalRode

Grünschnabel
Hallo,


ich sitze an einem kleinen Programm, in dem in der CMainFrame-Klasse eine Variable je nach Auswahl eines Menüpunktes gesetzt wird.
Abhängig von dieser Variable würde ich auch gerne in anderen Klassen, z.B. CView-Klasse etwas verändern.
Leider komme ich an die Variable nicht ran, wie geht das?

Gruß
Pascal
 
Hi,

ich (ein blutiger Anfänger, was MFC betrifft) habe gestern ein ähnliches Problem umgangen, indem ich beim Setzen der Variable den Wert ebenfalls an meine Unterklasse (z.B. CView) übergeben habe:
PHP:
void setVar(int value) {
  this->myvar = value;
  my_subclass.myvar = value; // bzw. eine Memberfunktion aufrufen
}
, wobei die Unterklasse diese Variable natürlich deklariert haben muss.

So, wie ich es verstanden habe, sollte eine Klasse nicht zuviel über die Klasse, in der sie instanziert wurde, wissen, um beliebig wiederverwendbar zu sein... (als alter Flasher vermisse ich auch ein Statement wie "_parent")

Gruß
 
So geht's:


In der CView-Klasse kann man auf CMainFrame und z.B. die Variable m_bOn
folgendermaßen zugreifen:


CMainFrame* pMainFrame = (CMainFrame*) ::AfxGetMainWnd();
ToolTip=pMainFrame->m_bOn;
 
Stimmt. ... aber, (interessehalber) geht das auch mit beliebigen Klassen? AfxGetMainWnd() gibt einen Zeiger auf das Hauptfenster zurück - die Frage wäre, wie ich eine derartige Funktion selbst implementiere: Ich habe z.B. 2 Klassen a und b, und instanziere in Klasse a ein Objekt der Klasse b. kann ich nun in Klasse b (über this) irgendwie herausfinden, welches Objekt dieses Objekt instanziert hat? Ich habe in C++ bislang keine Möglichkeit dazu gefunden.

Gruß
 
Ich habe z.B. 2 Klassen a und b, und instanziere in Klasse a ein Objekt der Klasse b. kann ich nun in Klasse b (über this) irgendwie herausfinden, welches Objekt dieses Objekt instanziert hat? Ich habe in C++ bislang keine Möglichkeit dazu gefunden.
Interessantes Thema. Das Problem taucht immer wieder auf (nicht im Forum, aber in Realität).

Du könntest beispielsweise deiner B-Klasse ein Member vom Typ A* geben, also einen Pointer auf ein A-Objekt. Wenn nun ein A-Objekt sein B erzeugt, kann es dem B einen Pointer auf sich selbst übergeben, damit B weiss, wem es gehört. Geschickterweise lässt sich sowas im Konstruktor von B (und eventuell auch A) erledigen.
 

Neue Beiträge

Zurück