Klasse bzw. Dilaog Zeiger übergeben
-
Halloo ,
folgende situation
habe ein Dialogklasse mit MFC erstellt z.B. CMEinDlg
und hab da noch eine Klasse MyKlasse so weit so gutmöchte eigentlich von MyKlasse auf die Variablen von CMeinDlg zugreifen.
dazu übergeb ich nach der instanzierung dem Klasse MyKlasse this Zeiger und
muss die dateien MeinDlg.h und Mein.h in MyKlasse includieren.this zeiger pack ich dan in ein CDialog dialogzeiger
der zugriff geht dann über ( ( CMeinDlg )Dialogzeiger)->m_vonCMeinDlgdas Problem ist das ich beim jeden Projekt diesen vorgang wiederholen muss oder
wenn ich die Klasse weiter gebe muss man sehr viele änderungen vornehmen.meine Frage kennt jemand eine andere Methode um diesen aufwand zu minimieren..
-
Wozu das Herumgecaste? Da du weißt, daß dort ein "CMeinDlg*" übergeben wird, solltest du diesen auch als "CMeinDlg* dialog;" speichern (und nicht als CDialog*).
Und wenn du deine Arbeitsklasse unabhängig von der konkreten Anwendung machen willst, sollte sie ihre Daten lieber selber verwalten und die nötigen Methoden bereitstellen, damit der Anwender sie mit Informationen versorgen kann (sobald du in deinem Design die Dialogklasse austauschst, gibt es bestenfalls eine Sammlung Compilerfehler - im Extremfall kommst du durch den Compiler und schießt dir das Programm zur Laufzeit ab).
-
Wenn ich einen Dialog habe, der Daten aus einer Klasse übernimmt, dann erfährt die Klasse niemals etwas von diesem Diaog.
Der Dialog bekommt eine Referenz uf die Klasse und evtl. eine Load/Save Funktion. Meistens nutzeich eine Referenz im Konstruktor auf die Klasse und der Dialog lädt die Daten dann direkt in der Klasse ab, bzw. zeigt die eben aus der Klasse.Damit ist die UI unabhängig von der Klasse.
-
halloo
das ging ja schnell
im grunde genommen ist das ja richtig was ihr sagt..
das problem ist wenn ich eine Klasse hab die meinetwegen die kommunikation mit
einer Serielleschnittstelle regelt über threads etc. und die ergbenisse auf den Hauptdialog weitergeben muss um sie anzuzeigen oder zu bearbeiten
da muss man ja hin und her casten oder ist dieser gedanke weit her geholt...
-
Du könntest den Dialog Nachrichten senden, dann brauchst du nur ein CWnd*.
Ne Idee wäre WM_COPYDATA, aber da gibts sicherlich noch schlaueres.
-
=-TaFa=- schrieb:
halloo
im grunde genommen ist das ja richtig was ihr sagt..Jo!
=-TaFa=- schrieb:
halloo
im grunde genommen ist das ja richtig was ihr sagt..
das problem ist wenn ich eine Klasse hab die meinetwegen die kommunikation mit
einer Serielleschnittstelle regelt über threads etc. und die ergbenisse auf den Hauptdialog weitergeben muss um sie anzuzeigen oder zu bearbeiten
da muss man ja hin und her casten oder ist dieser gedanke weit her geholt...Nein! Man muss nicht casten, und Du brauchst in keinem Fall in dieser Worker-Klasse einen verweiß auf den Dialog. Du musst nur entsprechende Scnittstellen schaffen, die die aten für den Dialog bereitstellen.
-
Martin Richter schrieb:
Nein! Man muss nicht casten, und Du brauchst in keinem Fall in dieser
Worker-Klasse einen verweiß auf den Dialog. Du musst nur entsprechende Scnittstellen schaffen, die die
aten für den Dialog bereitstellen.wie könnte den so ein schnittstelle aus sehen

hast du denn ein beispiel oder soo..
-
Wie soll ich da ein Beispiel geben?
Du sagst Du musst Daten im Dialog anzeigen aus der Klasse, dann müssen eben Funktionen vorhanden sein, die diese Daten liefern. Vom OOP design ist ein direkter Zugriff auf die Klasseninternas selbst immer zu vermeiden.
Dialog, also Userinterface, und Implementierung der Klasse sollten also über definierte Funktionen funktionieren.