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 gut

    mö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_vonCMeinDlg

    das 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).


  • Mod

    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. 🙂


  • Mod

    =-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..


  • Mod

    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.


Anmelden zum Antworten