Zugriff auf Memberfunktionen außerhalb des Hauptdialoges
-
Hallo alle,
ich bin C++ Laie und habe folgendes Anliegen:
Ich habe mit MFC ein kleines Dialogprogramm erstellt und würde gerne mein Main-Programm in einem seperaten cpp. File haben. Dieses Main Programm wird innerhalb der Dialogklasse"CXXXDlg" von einem Timer gestartet.
Meine Frage:Wie kann ich jetzt aus meinem Main-Programm auf memberVariablen/memberFunktionen meines CXXXDlg-Dialoges zugreiffen. Führt der Weg über einen Pointer auf den Dialog-Wenn ja wie lege ich diesen an???
Wenn ich momentan in meinem Main auf eine Puplic-Funktion des Dialoges zugreifen will (weiß auch net ob ich das richtig mach mit CXXXDlg::PublicFunction()) mekert der Compiler folgendermaßen: 'CXXXDlgDlg::callTest' : Unzulaessiger Aufruf einer nichtstatischen Member-Funktion'
Ich würde mein Programm wirklich gerne so strukturieren da für mich das die Übersichtlichste Methode zum arbeiten ist. Über Antworten würde ich mich sehr freuen!!!!
-
http://www.c-plusplus.net/forum/viewtopic-var-t-is-125623.html
Ziemlich weit unten ist der Abschnitt zu Dialoganwendungen.
-
Du musst Die Instanze des Dialoges Deiner "main Programm" (was auch immer das sein mag" mitgeben...
void TueWas(CMyDialog &dlg) { // Mach was... }
Aufgerufen wird es dann wie folgt:
OnTimer() { TueWas(*this); }
Falls Du ein Thread verwenden solltest, so musst Du beachten, dass Du die Zugriffe auf die Dialog-Instance via CriticalSection absichern musst!
-
Atm mach ich das über nen globalen Zeiger auf meinen Dialog/Formview/usw:
//Programmname "FooBar" #includes ... ... CFooBarDlg* pFooBarDlg=NULL; CFooBarDlg::CFooBarDlg():CDialog(etc) { pFooBarDlg=(CFooBarDlg*) this; }
Diese Methode (globale Zeiger)scheint allerdings recht unpopulär
-
Taelan schrieb:
Atm mach ich das über nen globalen Zeiger auf meinen Dialog/Formview/usw
[...]
Diese Methode (globale Zeiger)scheint allerdings recht unpopulärJa. Genau deswegen macht man das normal nicht mit einer globalen Variable sondern mit einem Parameter für die Funktion oder einem Member-Variable, falls Du eine Klasse verwendest...
-
Vielen Dank!!
es funktioniert endlich so wie ich`s mir vorstelle !!!
Ich hab aber noch ne kleine Anfängerfrage wenn Ihr schon so aufmerksam seid!
Ich dachte immer einen Header schreibe ich so:
#if !defined MyFunctions_h
#define MyFunctions_h#endif
Wie ich aber feststelle meckert der Compiler weil er trotzdem Sachen mehrmals einbindet. Was mache ich falsch?
-
Wenn Du das "#endif" gaaaaanz am Ende hast, sollte es eigentlich gehen... wenn es natürlich auch oben steht bringt es ja nix...
Ich empfehle aber sowieso heutzutage "#pragma once" zu verwenden...
-
Vor allem solltest du zwischen dem #ifndef und #endif nur Deklarationen haben, Definitionen gehören in die zugehörige CPP-Datei (der Guard schützt nämlich nur davor, daß der Header bei einem Übersetzungslauf mehrfach eingebunden wird - mehrfach vorkommende Symbole stammen normalerweise aus unabhängig voneinander compilierten Bibliotheksdateien).
-
hmm ich würd das ganze #ifdefn _CKLASSE_H_ #define _CKLASSE_H_ usw einfach weg lassen und nen einfaches #pragma once am anfang des .h files packen und feddig...