dynamisch Fenster erstellen
-
hallo leute,
ich habe mini anwendung erstellt, soweit so gut:class CMyApp : public CWinApp { ... }BOOL CMyApp ::InitInstance() { InitCommonControls(); CWinApp::InitInstance(); CFenster *window = new CFenster; // dialog window->Create(...); MyFenster.DoModal(); return FALSE;soweit so gut, jetzt das problem:
ich will in diesen meinem dynamisch erstellten Dialog viele Elemente(Buttons, Editboxen, etc..) DYNAMISCH erstellen lassen... wo packe ich dann DAS rein ???
wenn es statisch erstellstes Dialog wäre, würde ich das in sein OnInitDialog() reinschreiben, aber da es dynamisch ist, habe ich die Methode ja noch nicht...
HILFE

-
Sergius schrieb:
... aber da es dynamisch ist, habe ich die Methode ja noch nicht...
Wieso das denn? Was hat das mit dynamisch oder statisch zu tun? Du leitest dir ja eine Klasse von CDialog ab, fügst die OnInit dazu und setzt dort das erstellen deiner Buttons und co rein. Wo liegt das Problem? ^^
Aja und noch eine Frage: Wieso willst du eigentlich alles dynamisch erstellen? ^^
Grüssli
-
Dravere schrieb:
Aja und noch eine Frage: Wieso willst du eigentlich alles dynamisch erstellen? ^^
weil ich erst zur laufzeit bestimme, wieviele Dialoge es sein müssen...10 oder 100...
Dravere schrieb:
Sergius schrieb:
... aber da es dynamisch ist, habe ich die Methode ja noch nicht...
Wieso das denn? Was hat das mit dynamisch oder statisch zu tun? Du leitest dir ja eine Klasse von CDialog ab, fügst die OnInit dazu und setzt dort das erstellen deiner Buttons und co rein. Wo liegt das Problem? ^^
ich denke das würde in meinem fall nicht so einfach gehen, da eben diese alle dialoge verschiedene elemente dadrauf haben sollen, jedes eigene, und bei 100 dialogen müsste ich dann erstmal 100 abgeleitete klassen machen, was fast die gleiche wie statisch dann ist...
hat noch jemand vielleicht eine lösung ?
-
Woher weiß denn der Dialog überhaupt, welche Elemente er darstellen soll?
Wenn sich nur Kleinigkeiten ändern, kannst du ja das Grundgerüst vorgeben und die überflüssigen Elemente deaktivieren (und ausblenden).(und was ist das für eine Anwendugn, die mit 100 verschiedenen Dialogtypen herumhantieren will?)
-
Naja, zu fragen "warum?" ist ja auch nicht gerade ne Lösung?
Dynamische Dialoge sind nichts ungewöhnliches. Eine Tabelle (Datagrid) ist ja auch schon ein dynamisches GUI, Spalten- und Zeilen-Anzahl werden erst zur Laufzeit erstellt. Oder ein Baum, ist auch dynamisch. Oder ist die Ordneranzahl im Explorer immer gleich?
-
Artchi schrieb:
Naja, zu fragen "warum?" ist ja auch nicht gerade ne Lösung?
Aber dadurch könnten wir herausfinden, was er eigentlich vor hat und ihm gegebenenfalls eine bessere Lösung anbieten, als 100 verschiedene Dialoge zu erstellen ^^
Also deshalb vielleicht nochmals konkret @Sergius:
Was genau hast du vor? Bzw. was ist das Problem? Wieso brauchst du die Menge an verschiedenen Dialogen? Könnten wir vielleicht eine andere Lösung vorschlagen, als diese welche du anstreben willst? ^^Grüssli
-
Artchi schrieb:
Dynamische Dialoge sind nichts ungewöhnliches. Eine Tabelle (Datagrid) ist ja auch schon ein dynamisches GUI, Spalten- und Zeilen-Anzahl werden erst zur Laufzeit erstellt. Oder ein Baum, ist auch dynamisch. Oder ist die Ordneranzahl im Explorer immer gleich?
Ja, aber in beiden Fällen ist die Grundstruktur bereits vorgegeben (oder willst du mir ernsthaft erklären, daß du für jede Größenkombination eine neue Datagrid_x_y Klasse erstellen willst? - Du hast eine Klasse Datagrid und übergibst der dann beim Erstellen (eventuell auch danach) die Spalten- und Zeilenanzahl).
-
Ja, das meinte ich ja auch. Ich habe ein Grid das dynamisch aufgebaut wird. Was sonst? Schliesslich ist in dem Grid mehrere Textfelder. Natürlich kümmere ich mich nicht selber darum, das macht zum Glück die Grid-Komponente.
Und wenn ich einen dynamischen Dialog habe, dann habe ich irgendwo in meinem Dialog sowas:
void MyDialog::buildGui() { if(bestellung_auto) add(new Textfeld("Auto"); if(bestellung_flugzeug) add(new Textfeld("Flugzeug"); }Ist jetzt nur Pseudocode. Aber so in etwa.
Das ist eine Lösung. Ich kann aber auch mehrere Dialoge Designen, einen für Autos und einen für Flugzeuge und den entsprechenden anzeigen. Ganz nach den Anforderungen natürlich. Denn dynamamisch ist auch das:
if(bestellung_auto) new AutoDialog(); else if(bestllung_flugzeug) new FlugzeugDialog();
-
hallo Leute,
erstmal danke für viel Antworten und große Teilname an der Frage...jetzt versuche ich ein bisschen zu erklären was ich genau will:
ich will eine Anwendung schreiben, die zur Laufzeit über Netzwerk ein paar Daten bekommt (sagen wir mal Anzahl der angemeldete User), für jeden von diesen Usern (können 10-20 sein) soll eine Reihe (ca.5) verschiedene Dialoge (für jeden User gleich von der Struktur, aber verschieden im Inhalt) erstellt werden
ok, ich sehe jetzt ein, dass ich diese 5 Dialoge je von CDialog ableiten kann und die von dem Design da schon erstellen(MyDialog1, MyDialog2...MyDialog5), und für jeden User dann jeweils die 5 dynamisch erstellen...
da diese Dialoge aber vom Inhalt her (z.b. Daten in der Datagrid, Inhalt von Editboxen, etc) je nach User verschieden sein können, und Inhalt erst zur Laufzeit bekannt wird, wo kann ich dann Code fürs Ausfüllen von diesen Dialogen reinpacken ?
hoffe, dass es jetzt klar geworden

mfg
-
@Sergius,
Also mir hängt der Unterkiefer nach unten und habe mir sogar überlegt, ob ich da wirklich drauf antworten soll. Also entweder verstehe ich da was falsch oder du hast keine Ahnung, wie man Dialoge benutzt ^^Aber ich nehme mal an ich verstehe dich richtig und dann erkläre ich dir nichts, da dies alles schon zig Fach niedergeschrieben wurde und verweise dich einfach nur auf ein entsprechendes Tutorial:
http://www.henkessoft.de/C++/MFC/mfc_einsteigerbuch_kapitel2.htmGrüssli