Dynamisch erzeugen: Controls aus Resource



  • Hallo,

    ich möchte folgendes machen:
    Ich habe einen CDialog mit einigen Controls.
    Ausserdem habe ich dort (auf dem CDialog) einen Bereich der sich je nach Benutzereingabe ändert. Ändern bedeutet dort sollen andere Controls (Eingabefelder, Buttons etc) erscheinen.

    Das ganze sollte möglichst einfach sein. D.h. ich möchte den Bereich möglichst per Resourcen-Editor erstellen. Die Controls innerhalb eines solchen Bereichs sind also "fest". Die Anzahl der Bereiche ebenfalls.

    Das ganze soll so eine Art Wizzard werden (Button Click -> neuer "dynamischer Bereich").

    Wie würdet ihr das lösen? Habt ihr eventuell Links oder Beispielcode dazu?

    CDialog
    ###############################
    *                             *
    *  +---------------------+    *
    *  | Dynamischer Bereich |    * 
    *  |                     |    *
    *  +---------------------+    *
    *                             *
    *  sonstige "feste" controls  *
    *                             *
    ###############################
    

    Ich habe da zwar was gebastelt. Das ganze erscheint mir aber etwas komisch von der Logik her:

    Ich habe auf dem CDialog ein User Control, abgeleitet von CFrameWnd. Innerhalb des CFrameWnd (notwendig wegen CFormView?) benutze ich ein CFormView zum dynamischen laden der (Dialog-)Resourcen.
    Die Nachrichten (z.B. Button Clicks) muss ich noch irgendwie an den Dialog senden. Das sollte aber nicht so schwer sein.
    Ja, es funktioniert... aber ob das so ideal / sinnvoll ist...?



  • Wenn du Resource-Editor verwenden willst, um deinen Dialog dynamsich zu erweitern, dann erstellst du die Buttons, etc. wie gehabt im Editor und machst sie anfangs unsichtbar und bei Bedarf wieder sichtbar (Stichwort: VISIBLE).

    Eine andere Möglichkeit wäre, die Controls aus dem Code heraus zu erstellen (Create,...).



  • Ne das ist schlecht. Da muss ich mich ja um das Resize etc. kümmern.
    Die Controls sollten schon ineinander "sitzen".

    Mit dem Custom Control komme ich (in diesem speziellen Fall) nicht zurecht.

    Mit .Net ist das wesentlich einfacher... aber es muss eine MFC Anwendung sein :-|



  • Wenn du sie mit Create hinzufügst musst du auch mit Resize arbeiten 😕



  • Erstelle für jeden der einzelnen dynamischen Bereiche einen Dialog (sozusagen Unterdialog), ohne Titel usw.. Dann erstellst du auf deinem Hauptdialog ein Static welches als Kontainer für deine einzelnen Unterdialoge dient. Wenn du das soweit hast, brauchst du nur noch eine Klasse für jeden Unterdialog zu erstellen und dem als Parent das static von deinem Hauptdialog zu geben. Fertig is der Dialog und alles is getrennt, oder ebend du benutzt CPropertySheet was für den Wizzard eigentlich vorgesehen is und überlädst diesen. Aber dazu findest du sicherlich genügend Beispiele im Netz.

    Gruß Matthias



  • comment6,



  • Ich habs bisher so gemacht:
    Als erstes hab ich eine Dialog-Ressource erstellt, die alle die Elemente enthält, die jeder Dialog benötigt (z.B. Ok-Button, ....). Die anderen Controls habe ich dann per Create zur Laufzeit eingefügt. Die Methode von Matthias hat natürlich den Vorteil, dass Du alles mit dem Ressourcen-Editor machen kannst, was bei größeren Dialogen bzw. mehreren Varianten von Vorteil sein kann.


Anmelden zum Antworten