Von aus Dialog genutzer Klasse im Dialog zeichnen.
-
Aber die Klasse selbst ist ja bereits im Dialog deklariert.
-
mr. main schrieb:
Aber die Klasse selbst ist ja bereits im Dialog deklariert.
Achso, eventuell von der Dialogklasse ableiten?
-
Ne die Klasse hat ja nix mitm Dialog gemein.
Ich dachte eher an eine Art Interface das zwischen den beiden vermittelt
aber ich wüßte nicht wie und ob man so etwas realisieren kann.
-
Naja, wenn ich das richtig verstanden hab möchtest du über deine Klasse Änderungen am Dialog vornehmen und eventuell Daten davon nutzen bzw. Funktionen.
Dann wäre doch ein Zeiger auf den Dialog möglich.
-
Ja schon richtig verstanden.
Also mein Klasse vom Dialog ableiten und dann einen Zeiger auf den Parent der Klasse machen seh ich das richtig?
-
Naja dann brauchst du nicht ableiten.
Der aufruf der Klasse erfolgt ja sicher im Dialog.
In deiner Klasse setzt du einen Include auf die Headerdatei deines Dialogs.
Dann setzt du innerhalb deiner Klasse eben den Zeiger als Property.Also zb. so:
MyDlg *dialog;Und wenn du nun in deinem Dialog die Klasse startest, setzt du eben den Property.
So zb:
CSinSoundBuffer buffer; buffer.dialog = this;
-
Werds mal probieren, danke für den Tipp.
Sowas hab ich auch noch nicht gemacht.
-
Wenn ich jetzt aber meine Dialog in der Klasse inkludiere, was ich von Anfang an befürchtet hatte bekomme ich diese Fehlermeldungen für die Klasse und den Dialog
1>c:\projects\mytool\audiotest.h(28) : error C2143: syntax error : missing ';' before '*' 1>c:\projects\mytool\audiotest.h(28) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 1>c:\projects\mytool\audiotest.h(28) : error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
-
Was steht denn in der Zeile, aus der der folgende Fehler kommt?
1>c:\projects\mytool\audiotest.h(28) : error C2143: syntax error : missing ';' before '*'Nett wäre es 2-3 Zeilen vor und nach der Meldung zu sehen.

-
CStatic* m_stPb1; DECLARE_MESSAGE_MAP() public: afx_msg void OnBnClickedOk(); afx_msg void OnBnClickedCancel(); private: -> CSinSoundBuffer* m_pSinBuf; //Hier meckert der Compiler das fehlende Semikolon an. CDirectSound* m_pSoundCtrl;Nehme ich den include auf den Dialog aus der Klasse wieder raus dann wird auch wieder korrekt kompiliert.
Sollte man solche Rückwärtsinkludierungen nicht eigentlich auch meiden?
-
Kannst du den Zeiger verwenden, wenn der include weg ist?
Wenn ja dann lass ihn weg.Zum Thema Rückwärts includieren müsste ich dir allerdings recht geben.
Wobei ich es gerade sehe, der Zeiger den du setzen solltest wäre nicht im Dialog sondern in deiner Klasse richtig gewesen.
Du setzt ja in deinem Dialog einen Zeiger auf die Klasse, jedoch sagte ich in der Klasse einen Zeiger auf den Dialog.
-
Aber wie instanziier ich dann ein Objekt auf meine Klasse welche ja auch im Dialog benötigt wird.
-
Ach du wolltest deine Klasse dort als Property Zeiger initialisieren?
Wobei ich mich da frage, warum er einen Fehler wirft. Bringt er noch einen Fehler, dass er den Datentyp "CSinSoundBuffer" nicht kennt?
-
Ne habe den Fehler gerade beseitigt in dem ich vor der Deklaration der Klasse CSinSoundBuffer die Vorwärtsdeklaration mache anstatt nem include als
class CAudiotest;Jetzt klappt es wie gewünsch und ich kannaus der Klasse auf den Dialog zugreifen.
Aber danke für die Unterstützung bis hierhin.
-
Ich war wohl etwas zu vorschnell, jetzt meckert der Compiler sobald ich innerhalb der Klasse auf Methoden aus dem Dialog zugreifen will und gibt diese
Fehlermeldung aus.1>c:\projects\gsm testtool\sinsoundbuffer.cpp(47) : error C2027: use of undefined type 'CAudioTest'
1> c:\projects\gsm testtool\sinsoundbuffer.h(11) : see declaration of 'CAudioTest'
1>c:\projects\gsm testtool\sinsoundbuffer.cpp(47) : error C2227: left of '->DrawCurves' must point to class/struct/union/generic typeDeklariert wird wie folgt
class CAudioTest; //Vorwärtsdek. class CSinSoundBuffer { ... CAudioTest* myDlg; ... } //Zugriff in der Methode der Klasse myDlg->DrawCurves(Wert, Wert); //Im Dialog wird nach Instanziierung der Klasse m_pSinBuf->myDlg = this;
-
Hast du vorwärts und Rückwärtsinclude drin?
-
Nein nur vorwärts
-
Setz mal noch den Rückwärts-Include und gib dann mal bescheid was dein Compiler sagt.

-
Wieder die gleichen Fehler wie vorhin.
Vorwärtsdek hab ich drin gelassen
-
Wobei mich das gerade verwundert. Da ich selbst momentan ein Programm habe in dem ich in beide Richtungen include und es funktioniert.
Hängt damit zusammen, dass ich in meinen Dialogen Daten aus dem MainDialog brauche und somit eben Zeiger auf den Maindialog drin habe.
Darüber kann ich wunderbar auf Funktionen und Property's des MainDialogs zugreifen.
MainDialog:
#include <foo> ... #include "dialog2.h" ... // Im On Init: dialog2 dlg; dlg.dialog1 = this; ...Dialog2:
#include <bar> ... #include "dialog1.h" ...In der Headerdatei dann eben als Property:
dialog1 *myDlg;Und mein Programm tut was es soll.