VC++, Mehrere Forms/Dialog in SDI Anwendung

felix_1000

Grünschnabel
Hallo Programmierer

In einer SDI-Anwendung möchte ich meine Daten (CDoc..) auf mehrer Forms /Child-Dialogen darstellen. Die Forms beinhalten Buttons, Edit-Boxen u.a. Über ein Menü, eine Toolbar oder ein separates Window sollen die einzelnen Forms zur Laufzeit angezeigt werden.

Die Daten sollen einerseits aus Platzgründen auf verschiedenen Seiten dargestellt werden, andererseits sollen logisch zusammengehörende Daten auf der gleichen Seite dargestellt werden.

Ich weiss, dass man eine einzelne Form mit einer abgeleiteten Klasse von CFormView erstellt, aber wie macht man das mit mehreren Seiten Forms oder Child-Dialogen?

Bin für alle Infos, Links oder Büchertips zu diesem Thema dankbar.

MfG
 
Hallo Felix...

Ich habe mir gerade letztens ein ähnliches Problem gestellt.
Ich bin so vorgegeangen:
1.: SDI Anwendung eröffnen und von CFormView ableiten...(Kann so sein, muss aber nicht)
2.: Dann habe ich in die APP ein zusätzliches Dialogfeld eingefügt...(Als zusätzliche Ressource)
3.: Je nach Anwendung und wenn du vorallem mehrere Dialogfelder "gleichzeitig" benutzen willst, bietet sich hier das Erzeugen der Dialoge als nicht Modal an.
Ich habe den Code nicht gleich hier, aber geh mal gucken unter:
http://www.tutorials.de/tutorials182031.html
4.: Unter den Styles im Dialogeditor musst du "Untergeordnet" anwählen und bei einer CFormView, beim Hauptanzeigedialog "Nebengeordnete ausschneiden", damit dir das Dialogfeld überhaupt auf dem Mainframe angezeigt wird.
5.: WICHTIG: Die Dialogfelder solltest du wenn möglich in der Viewklasse erzeugen., dann kannst du dir "Anzeigunannehmlichkeiten" sparen...

Hoffe konnte helfen....

Gruzzz Dan
 
Hallo Dan McHould

Ich habe deinen Code ausprobiert und meinen Anforderungen anzupassen versucht. Das zusätzliche Dialogfeld(er) muss exakt gleich gross wie das Frame (Originalview) werden. Ausserdem muss die Grösse beim Vergrössern des Fensters angepasst werden. Das eingefügte Dialogfeld hat hat die Eigenschaften "child" und "thin Frame".

In der View-Klasse, die von FormView abgeleitet ist mache ich folgendes

void CRigSimC2View::OnInitialUpdate()
{
CDialog1* dlg1 = new CDialog1(this);
dlg1->Create(IDD_DIALOG1, this);
CRect myRect;
GetClientRect(myRect);
dlg1->SetWindowPos(&CWnd::wndTop,0,0,myRect.Width(), myRect.Height(), NULL);
dlg1->ShowWindow(SW_SHOW);


So weit ist das kompilierbar. Das Problem ist, dass das Dialogfeld grösser als das MainFrame ist (Erst beim Ziehen des Frames wird der ganze Dialog sichtbar) Ausserdem bleibt der Dialog immer gleich gross. Hast du eine Ahnung wie ich dem abhelfen kann? Ich habe es schon versucht die Dialoge von der Klasse FormView abzuleiten, bin aber nicht auf einen grünen Zweig gekommen.


Gruss, felix_1000
 
Hi Felix1000..

Hmmm...Habe mir mal das ganze angeschaut, könnte es vielleicht sein, dass das Hauptdialogfeld der MainKlasse zu gross ist?
So wie ich das verstanden habe, wird das Hauptfenster beim Start nicht auf den ganzen Bildschirm aufgezogen...Wenn Du nun mit GetClientRect die grösse Deines Dialogfeldes beim Start bestimmst, dann sollte dabei der Aktive Bereich des Hauptfensters gemessen werden und dieser bestimmt anschliessend die Grösse deines Dialogfeldes.
Bei mir ist das Dialogfeld immer exakt so gross wie das Aktive MainFrame...
Dieses verändert sich natürlich auch nicht mehr (Du erzeugst das Fenster und setzt die Grösse mit SetWindowPos fest)
Bei der dynamischen Änderung der Grösse bin ich auch noch am gucken, ist noch interessant, musste dies aber bisher nie machen...

Ich melde mich, sobald ich mehr weiss...

Gruss Dan
 
Zurück