auf Variablen des 'parent' Objekts zugreifen

baeman

Mitglied
Hallo Leute,

folgendes Problem:

Cdialog Klassen:

parent Klasse -> OTime
child Klasse -> Input_File

Wie kann ich von dem Dialog Input_File aus Variablen des OTime aendern?
 
Mit CWnd::GetParent() bekommst Du einen Zeiger auf das Elternfenster, wenn Du es beim Erstellen des Dialoges mit angegeben hast.
 
Du kannst dir wie jokey2 gesagt hat, mit GetParent ein CWnd* von deinem Parent holen, das musst du dann allerdings noch auf OTime casten (ist ja über CDialog von CWnd abgeleitet).

Andere Methode:
Baue den Constructor von Input_File um, dass du einen OTime-Pointer statt dem CWnd übergeben kannst und merke dir den Wert in einer Membervariablen.
 
Danke erstmal,

beide Antworten hoeren sich ziemlich gut an.
Wobei ich noch nicht wirklich weit gekommen bin.

Wenn ich es mit GetParent versuche, bekomme ich ne ganze Reihe Fehler vom Compiler.

this->(OTime)GetParent()->vEdit_stHour.SetWindowText("1200");

Und wie ich den Konstruktor umbaue, naja hat noch nicht so recht geklappt.
Wuerde mich ueber weitere Tipps freuen ;-)

danke
 
Habe es nun auch schon in anderen Varianten Versucht,


wie z.B.

CWnd wOTime = (OTime)GetParent();

Wobei er dann OTime nicht erkennt. Und wie kann ich das Parent angeben?
 
Hast du da die .h von der OTime-Klasse includet?

Dann müsste das so gehen:

OTime* pOTime = (OTime*)GetParent();
 
ja die Header-Datei ist includet, aber will noch nicht.

koennte es daran liegen, dass OTime eine Klasse vom Typ CDialog und nicht CWnd ist
 
Eigentlich nicht, CDialog ist ja von CWnd abgeleitet.

Zeig mal kurz die OTime.h wenn's geht.
 
Code:
#pragmaonce
 
#include "afxwin.h"
 
#include "StateVector.h"
 
#include "Kep.h"
 
#include "Input_File.h"
 
 
 
// COTimes dialog
 
class COTimes : public CDialog
 
{
 
DECLARE_DYNAMIC(CTimes)
 
public:
 
COTimes(CWnd* pParent = NULL); // standard constructor
 
virtual ~COTimes();
 
// Dialog Data
 
enum { IDD = OTimes };
 
protected:
 
virtualvoid DoDataExchange(CDataExchange* pDX); // DDX/DDV support
 
DECLARE_MESSAGE_MAP()
 
public:
 
int vRadio_Mean;
 
int vRadio_Oscu;
 
CButton vCheckEpochInit;
 
CEdit vEdit_Step;
 
virtual BOOL OnInitDialog();
 
afx_msg void OnBnClickedEpochinit();
 
afx_msg void OnBnClickedMean();
 
afx_msg void OnBnClickedOscu();
 
CEdit vEdit_EpochYear;
 
CEdit vEdit_EpochMonth;
 
CEdit vEdit_EpochDay;
 
CEdit vEdit_EpochHour;
 
CEdit vEdit_EpochMin;
 
CEdit vEdit_EpochSec;
 
CEdit vEdit_StartYear;
 
CEdit vEdit_StartMonth;
 
CEdit vEdit_StartDay;
 
CEdit vEdit_StartHour;
 
CEdit vEdit_StartMin;
 
CEdit vEdit_StartSec;
 
CEdit vEdit_EndYear;
 
CEdit vEdit_EndMonth;
 
CEdit vEdit_EndDay;
 
CEdit vEdit_EndHour;
 
CEdit vEdit_EndMin;
 
CEdit vEdit_EndSec;
 
void ShowState(int Sel);
 
void CreateChildrenForOrbitFormat();
 
afx_msg void OnCbnSelchangeOrbitformat();
 
 
 
CKep kep;
 
StateVector stateVec;
 
Input_File input_file;
 
void SV2KEP(void);
 
void KEP2SV(void);
 
void OnOK();
 
void OnCancel();
 
 
 
};
 
Dann müsste es innerhalb von Input_File.cpp so aussehen:

// oben
#include "OTimes.h"

// Zugriff innerhalb einer Input_File-Member-Funktion
COTimes* pOTimes = (COTimes*)GetParent();

Wenn da ein Fehler kommt, kannst du den bitte genau hier reinschreiben (copy/paste).
 
Zuletzt bearbeitet:
Zurück