Ableitung von eigener Dialogklasse



  • Hab da so ein komisches Problem. Ich will eine neue Dialogklasse erstellen, die aber nicht von CDialog sondern von ner eigenen Dialogklasse ableiten. Aber wie mach ich das? VC++ kommt ja sofort mit seinem vollautomatischen Dialogfeld, wo man die Basisklasse einstellen kann... nur sind in der Liste dort leider ausschließlich MFC-Klassen, die eigene kann ich nicht auswählen.
    Weiß jemand, wie man das macht?



  • Du erstellst einfach deine Klasse die von CDialog abgeleitet ist und änderst dann manuell überall wo CDialog steht in CMeineKrasseKlasse



  • Oh.. danke 😉 .. wie schön, das Microsft an alles gedacht hat, und seine Programme so eingerichtet hat, dass man einfach und praktisch mit ihnen arbeiten kann 😃



  • Hm.. so ganz so weinfahc isses nicht, aber mitlerweile hab ichs geschafft. Für die die es interessiert: es reicht nicht einfach nur, alle CDialog's in CMeineKlasse umzubenennen. Erstens muss man noch die Headerdatei von CMeineKlasse einbinden, und zweitens, und das ist das wichtige: CMeineKlasse muss einen Konstruktor definieren, der wie der CDialog-Kostruktor 2 Parameter aufnimmt, die ID des Dialogs und ein CWnd - Zeiger. Diese müssen auch per Initialisierung an CDialog weitergegeben werden.
    Jaja.. Microsft macht es uns leicht. 🙂



  • Was gefällt Dir denn an CDialog nicht?



  • Hallo Ghost,

    geht es dir nur darum, dass du deine eigene Klasse, die du bereits erstellt hast, nicht als Basisklasse auswählen kannst?

    Du kennst aber schon das Feld "Klassentyp" in dem Dialog ->Einfügen ->Neue Klasse. Da kann man zwischen MFC- und eigenen Klassen umschalten.

    Aber das war nicht das Problem, oder?

    Gruß, Volle.



  • @Erhard : Cdialog gefällt mir einfach perfekt 😃 . Ds Problem ist einfach nur, das ich ungefähr 7 Typen von Dialogen brauche, die von ihrer Funktionalität nahezu identisch sind, und es sich daher geradezu anbietet, ihre gemeinsame Funktionalität in eine Basisklasse auszulagern. Diese Basisklasse kann ich dann natürlich von CDialog ableiten. Oder gibts da ne bessere Möglichkeit? (Die Dialoge sind übrigens immer noch unterschiedlich genug, als dass ich nicht EINE Klasse für alle gebrauchen kann)

    @Volle: Natürlich hab ich auch schon probiert, die Klasse als eigene einzustellen, dann konnt ich auch meine CMeinBasisDialog als Basisklasse benutzen. Das problem ist jedoch, dass mir VC++ dann nicht mehr erlaubt, ihr die Dialogresource zuzuordnen... es scheint nämlich zu blöd zu sein, um zu erkennen, dass meine Dialogklasse dann indirekt von CDialog abgeleitet ist.



  • Hi Ghost,

    Ds Problem ist einfach nur, das ich ungefähr 7 Typen von Dialogen brauche, die von ihrer Funktionalität nahezu identisch sind, und es sich daher geradezu anbietet, ihre gemeinsame Funktionalität in eine Basisklasse auszulagern. Diese Basisklasse kann ich dann natürlich von CDialog ableiten.

    Dann verstehe ich nicht so ganz, was du vor hast. Warum machst du nicht deinen Basisdialog mit dem Resourceneditor. Dann verknüpfst du deine diversen Dialoge alle mit dieser Resource. Das habe ich zwar noch nie gemacht, soweit ich mich erinnere. Aber das sollte gehen. Danach erzeugst du in jedem DLG die zusätzlichen Funktionalitäten während der Laufzeit. So wäre ich da vorgegangen. Kann natürlich sein, dass du das vielleicht nicht so machen kannst/ willst.

    Gruß, Volle.



  • Ähm.. nein, eigentlihc bietet sich das nciht so an. Ok, mal ganz konkret: ich habe ein Programm, das verschiedene mathematische Funktionen Graphisch darstellt (z.b. sinus, cosiuns, tangens, parabeln, hyperbeln... etc). Um zur laufzeit parameter für diese funktionen einzugeben, ist, je nach auswahl der funktion, ständig ein nciht-modaler dialog sichtbar. Im Prinzip ähneln sich die verschiedenen Dialoge für die parametereingabe... ale haben sie ganz bestimmte funktionen zur weitergabe der eingegebenen parameter an die dokumentklasse der anwendung, alle haben sie ähnliche funktionen zur bearbeitung der parameter. Allerdings sind die unterschiede auch deutlich: verschiedene parameter für verschiedene funktionen. Ich finde es sehr sinnvoll, dass in allen Dialogen die funktinen gleich heißen, aber veerschieden arbeiten, da ich dann in meinem programm nur einen zeiger vom typ ihrer basisklasse brauche, und zur laufzeit nicht wissen muss, welchen typ ich gerade anspreche.



  • Hallo Ghost,

    jetzt wird es langsam klarer.

    Vorschlag:

    Ist es dann nicht möglich die Eingabe und Bearbeitung der Parameter zu trennen und für die Bearbeitung wiederum eine eigene Klasse zu bilden. Von dieser kannst Du dann problemlos weitere Klassen ableiten, weil es ja deine eigene ist. Der Dialog hat dann nur noch die Aufgabe, für die er eigentlich auch da ist. Nämlich die Werte aufzunehmen, da Weitergabe und Aufarbeitung ausgelagert sind.

    Gruß, Volle.



  • Hab ich versucht... geht leider auch nicht... das Problem ist, dass verschieden Funktionen auch verschiedene Anzahlen und Arten Paramteren aufnehmen.. aber ich denke das mit der Ableitung geht jetzt.. man mus zwar viel rumbasteln, damit VC++ nicht meckert, aber es geht...


Anmelden zum Antworten