Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (WinAPI, Konsole) » Variable aus Klasse 1 in Klasse 2 ändern?

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
25.04.2006, 20:07 Uhr
JPSelter



Ich habe mit VC++6 ein MFC Programm geschrieben und habe nun ein Problem, das ich nicht gelöst bekomme. Ich habe:

1) Hauptprogramm-Klasse Toolbox.cpp
2) Haupt-GUI-Klasse ToolboxDlg.cpp
3) zusätzlicher Dialog myDialog1.cpp

Ich muss nun aus myDialog1 Zugriff auf eine Variable aus ToolboxDlg haben, ich habe bereits dafür eine set-Methode angelegt. Ich habe bisher den Fehler gemacht, dass ich ausversehen eine Instanz angelegt habe, und weiss nun, dass ich einen Pointer auf die Hauptklasse haben muss. Aber wie mache ich das?

Etwas Code:

Aus Toolbox.cpp

Code:
BOOL CToolboxApp::InitInstance()
{
    AfxEnableControlContainer();

#ifdef _AFXDLL
    Enable3dControls();            // Call this when using MFC in a shared DLL
#else
    Enable3dControlsStatic();    // Call this when linking to MFC statically
#endif

    CToolboxDlg dlg;
    m_pMainWnd = &dlg;
    // <------ hier muss sicher ein Pointer hin, aber welchen Typs und wo deklariert?
    int nResponse = dlg.DoModal();
    if (nResponse == IDOK) // exit program via the close button
    {
        // do nothing
    }

    return FALSE;
}



Aus ToolboxDlg.h

Code:
public:
void CPMDToolboxDlg::setEnabledBitmaps(int pos, int v);
...
protected:
void CPMDToolboxDlg::ProcessBitmaps();



Aus myDialog1.h

Code:
public:
CPMDToolboxDlg *m_pDialog1;



Aus myDialog1.cpp

Code:
void myDialog1::OnCheck1()
{
    if (m_buttonCheck1.GetCheck() == 1)
        m_pDialog1->setEnabledBitmaps(0,1);
    else
        m_pDialog1->setEnabledBitmaps(0,0);
}



Wie Ihr seht habe ich diesen Pointer einfach mal als Member von myDialog1 deklariert, aber er wird im Hauptprogramm nicht gefunden. Includen kann ich myDialog1.h dort nicht, weil es bereits in Toolbox.cpp included ist (gibt sonst einen LNK2005 Fehler).

Ich werde langsam müde und habe so viel ausprobiert, aber ich finde ich Lösung nicht. Hoffentlich könnt Ihr mir helfen Danke schonmal!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
25.04.2006, 20:47 Uhr
xXx
Devil


tjo ist doch kein Problem... setz beim aufrufen von myDialog1 entweder nen pointer auf das mainwnd... oder nimm halt:

C++:
void myDialog1::OnCheck1()
{
    CPMDToolboxDlg* pMainDlg = (CPMDToolboxDlg*)AfxGetMainWnd();
    if (m_buttonCheck1.GetCheck() == 1)
        pMainDlg->setEnabledBitmaps(0,1);
    else
        pMainDlg->setEnabledBitmaps(0,0);
}
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
25.04.2006, 21:04 Uhr
Pler
Einer von Vielen
(Operator)


Ansonsten bin ich der Meinung, dass die eigentlichen Daten nicht in den Dialogklassen gehalten werden sollten.
Man legt also extra Klassen an, die Daten halten. Die Struktur sollte ungefähr der logischen Aufteilung des Sinns der Daten entsprechen. In kleineren Prokjekten reicht sicherlich eine einzige Klasse dafür.
Die Dialoge werden nun dazu benutzt die Daten in dieser "Datenklasse" zu manipuieren (vorzugsweise über get- und set-Methoden).

Wenn man das nun so macht, dann kann man eine Instanz dieser "Datenklasse" beim Start der Anwendung anlegen. (Zum Beispiel im Hauptdialog, oder so)

Wenn man sich nun einen Zeiger auf den Hauptdialog holt, hat man auch immer Zugriff auf alle relevanten Daten. Und das immer auf die gleiche Weiße.

Praktisch ist das auch, wenn Daten von mehreren Stellen aus geändert werden sollen; oder wenn zu einem späteren Zeitpunkt Änderungen bezüglich der Aufteilung der Dialog-Fenster gemacht werden (müssen).
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
25.04.2006, 21:10 Uhr
JPSelter



Yipeehaee! Es klappt!

@Pler: Danke für den Hinweis. Hätte ich das direkt so gemacht, wäre mir dieses Problem wohl erspart geblieben. Werde das Programm bei Zeiten umbauen.

Dieser Post wurde am 25.04.2006 um 21:12 Uhr von JPSelter editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (WinAPI, Konsole) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: