Hauptdialogdesign für Porgramm mit Visual C++ 6.0
-
Hallo,
ich schreibe gerade an einem Porgramm zur Erfassung von Temperaturkurvern im zuge einer Technikerarbeit und steh grad voll auf dem Schlauch was das Programmfenster angeht.
Das Teil soll etwa wie folgt aussehen:
Oben ein fester Bereich mit einigen Buttons zB. Start, Auswertung, Einstellungen, diese Buttons sollen immer zu sehen sein.
unten ein Leiste für Meldungen auch immer zu sehen.
Keine Menü leiste, keine Toolboxen, keine konventionelle Statusleiste.
Also soweit würde mir eine normale Dialogfeldbasierte Anwendung reichen.
Aber jetzt kommts: der mitlere Bereich des Fesnsters soll sein Aussehen verändern, je nach dem welcher Button gedrückt wurde, zB bei Start sollen Eingabefelder für Name des Prüfers, SN der zu testenden Maschine usw. und ein Button um die Temperaturaufzeichnung zu starten erscheinen, bei Auswertung eine Liste mit den Ergebnissen usw.
jetzt hätte ich natürlich die möglichkeit alle Steuerelemente für alle Funktionen übereinander zu legen und dann immer nur die sichtbar zu machen die gerade gebraucht werden. aber das wäre dann ziemlich übel zusammenzustellen.
mir wäre es am liebsten ich hätte das Programmfenster mit allen Steuerelementen in einer Klasse.
hab mir auch schon die MDI basierte Anwendung angesehen, dabei bräuchte ich dann für jede Ansicht eine FormView und die währen dann alle in eigenen Klassen verteilt und wie ich damit die Festen Bereiche mit den Buttons und der Meldungsleiste hinkriegen soll ich mir auch ein Rätsel.
falls ihr jetzt nicht genau wisst wie ich das meine, gibt's zB. den TMPEGEnc DVD Author 1.6 und TMPEGEnc 3.0 Express als Beispiele wie meine Oberfläche etwa aussehen soll.
Bitte dringend um Hilfe!!!
DANKE!!!
-
du kannst doch register-karten nehmen. da brauchst du für jeden inhalt der einzelnen karten ein eigenes dialogfeld um den inhalt dar zustellen
-
die Idee hatte ich auch schon, es soll sich auch verhalten wie ein Register, aber eben nicht so Aussehen, also statt der TABs große Buttons, die irgendwo im Fenster verteilt sein können.
zweitens wären dann die die einzelnen Dialogfelder die auf den jeweiligen Registerkarten abgebildet werden alles eigenene Klassen, ich hätte aber gern alle Steuerelemente usw. in der Klasse des Hauptfensters, oder ist das der falsche Ansatz?
ich muss noch anmerken daß ich absoluter Anfänger bin was Windowsprogrammierung unter VC++ angeht.
Mit der Sprache C++, Objektorientierung, Zeigern, usw. fühle ich mich so einigermasen sicher wenns nicht zu komplex wird. aber wenn ich die MSDN zu Visual Studio anseh blick ich so gut wie nix und weiss meist auch nicht wonach ich suchen soll.
-
wenn ich so was in der richtung machen muss mache ich das meistens so:
- alle controls ins dialogfeld basteln (wegen der übersicht alle die zu einer funktion gehören in eine ecke, die zur anderen funktion gehören in die andere ecke, ...)
- dann kannst du über die ressourcen-id und SetWindowPos() di position bestimmen
- alles was du nicht brauchst: ShowWindow(FALSE)wenn du das geschickt machen willst und einen übersichtlichen code behälst machst du dir nen array (BOOL) von allen controls, sagst den einzelnen feldern true, oder false und gehst das array später in ner for-schleife durch in die du einfach schreibst:
for (int i = 0; i < ANZAHL_CONTROLS; i ++) GetDlgItem(i)->ShowWindow(Array[i]);
-
Danke für deine Hilfe Red Skall, aber wenn ichs so mach wie du gemeint hast dann wirds wohl ziemlich schnell unübersichtlich, sind nämlich viele Ansichten mit jeweils 'nem ganzen Haufen Steuerelementen.
mir ist jetzt ne andere Idee gekommen aber ich hab keine Ahnung obs funzt und wenn ja wie.
als ich mir die Eigenschaften meines Dialogfeldes angesehen hab bin ich auf die Option "Steuerelement" gestossen. Die Kontexthilfe sag dazu folgendes:
SteuerelementErzeugt ein Dialogfeld, das als untergeordnetes Fenster eines anderen Dialogfelds funktioniert, ähnlich einer Seite in einem Eigenschaftsblatt. Dieses Format ermöglicht es dem Benutzer, mit der TAB-TASTE zwischen den Steuerelementfenstern eines untergeordneten Dialogfelds zu wechseln, dessen Zugriffstasten zu verwenden usw. Typ: Bool. Standardwert: False.
Also hab ich mir eine Dialogfeldbasierte Anwendung mit dem Assistenten erstellt, und noch ein zusätzliches Dialogfeld (sollen später mal mehr werden) gebastelt und dort die oben genannte Option angehakt.
jetzt dachte ich mir, ich könnte dieses zweite Dialogfeld in mein Hauptdialog reinsetzen wie ein Steuerelement, nur wie??? oder lieg ich da ganz falsch.
Bitte helft mir, ich hab am Dienstag die Zwischenstandspräsentation meiner Technikerarbeit und will da wenigstens mein Programmfenster präsentieren!!!
-
sorry, da hab ich keine ahnung. wenns nicht anders geht dann musstes halt doch so machen. aber vielleicht kannst du dir doch was abgucken von den registrierkarten. ich hab selber noch nichts damit gemacht aber vielleicht kannst du das ja doch so in der art machen. falls ja, musste mal in visual c++ in 21 tagen gucken. da steht das mit den registrier karten drin (glaube / hoffe ich jetzt)
-
ich bin jetzt ein ganz klitzekleines bischen weitergekommen:
void CIVTDlg::OnBtnStart()
{
CDlgStart* startDialog = new CDlgStart;
startDialog->Create(IDD_DLG_START, this);
startDialog->ShowWindow(SW_SHOW);
}also wenn ich im Hauptdialog auf Start klicke wird der andere Dialog (IDD_DLG_START) im Hauptdialog eingeblendet (nicht modal), leider in der Ecke links oben, jetzt sollte ich noch die Position festlegen können.
ich weis auch nicht ob sich das so gehört was ich da gemacht hab, deshalb bin ich für jede Konstruktive Kritik dankbar, schließlich lernt man aus seinen Fehlern.
ich nehm auch Vorschläge für ganz andere Wege gerne an.
bestimmt gibt's für mein Problem tausend mögliche Lösungen,
für'n Anfänger wie mich ist's halt schwer da das eleganteste rauszufinden.aber jetzt erstmal gut N8!