Dialogfenster über Menü umschalten ?
-
Hi,
ich gebe zu ich bin im Bereich MFC (Visual C++) neu
Da ich mir gerade eine kleine Anwendung erstellt habe und nicht allzu viele TabControls einfügen möchte, stelle ich mir gerade die Frage, ob es möglich ist zwischen Dialogfenstern umzuschalten.
Also mal angenommen ich habe eine Menüleiste in meinem Hauptdialogfeld (IDD_Dialog1) und möchte nun über das Menü Fenster (mit Untermenüs : Dialog1 und Dialog2) IDD_Dialog2 anzeigen ?
Wie muss ich vorgehen um dies umzusetzen bzw. ist dies überhaupt möglich ?Gruß Sebbl
-
Wenn ich dich richtig verstehe, möchtest du einen Dialog ein- und ausblenden.
Erstmal solltest du den Dialog als untergeordneten Dialog im Designer anlegen und davon anschließend eine Klasse ableiten.
Wenn du diesen dann im Code erstellt hast (mit Create()), kannst du ihn mit SetWindowPos() erstmal an die richtige Stelle setzen und anschließend mit ShowWindow(SW_SHOW) bzw ShowWindow(SW_HIDE) ein- und ausblenden.
Vom Prinzip her könnte dir vielleicht dieses TabCtrl Demo Projekt helfen. Da werden letztlich auch nur Dialoge ein- und ausgeblendet.
-
Hi Sed98,
Danke für deine Antwort.
Jedoch entspricht das Beispiel nicht so ganz meinen Vorstellungen..
Ich habe ja bereits mehrere Tabs innerhalb meines Dialogs
Ich hätte halt ganz gern, dass ich komplette Dialogfenster über das Menü ein- und ausblende.Vorstellung
:
- das Programm wird immer mit Dialog 1 gestartet
- über das Menü Fenster erfolgt die Auswahl von Dialog 1 oder Dialog 2
- sollte Dialog 2 ausgewählt werden, wird Dialog 1 ausgeblendet bzw. versteckt (hide)Derzeit habe ich 2 Dialogfenster angelegt und möchte die Funktion M_Dialog2 zum umschalten auf Dialog2 verwenden.
void CDialogtestDlg::M_Dialog2() { ??? ShowWindow(SW_HIDE) ???? }
Leider bin ich beim Syntax meines Vorhabens etwas ratlos.
Der aktuell eingeblendete Dialog = IDD_Dialog1 und der einzublendende Dialog besitzt die ID IDD_Dialog2.Gruß Sebbl
-
Es ging mir bei dem Beispiel auch nicht um die Tabs, sondern um die Dialoge dadrin. Die Dialoge innerhalb der Tabs müssen auch erstellt, positioniert und ein- und ausgeblendet werden. Also genau das, was du auch machen willst.
also zum Beispiel:
CDialog *m_pDialogs[2];
Konstruktor
m_pDialogs[0] = new CDialog1; m_pDialogs[1] = new CDialog2;
OnInitDialog
m_pDialogs[0]->Create(IDD_DIALOG1, this); m_pDialogs[1]->Create(IDD_DIALOG2, this); m_pDialogs[0]->SetWindowPos(&wndTop, 0, 0, 300, 300, SWP_SHOWWINDOW); m_pDialogs[1]->SetWindowPos(&wndTop, 0, 0, 300, 300, SWP_HIDEWINDOW); m_pDialogs[0]->ShowWindow(SW_SHOW);
In deiner M_Dialog2() Funktion würde dann eigentlich nur drin stehen:
m_pDialogs[0]->ShowWindow(SW_HIDE); m_pDialogs[1]->ShowWindow(SW_SHOW);
Ob du bei zwei Dialogen ein Array brauchst, sei jetzt mal dahin getellt.
Damit das alles funktioniert musst Du aber in der Ressourcenansicht von deinen zwei Dialogen jeweils eine Klasse erstellen (Rechtsklick -> Klasse hinzufügen) und die Header in dein Hauptdialog entsprechend einbinden.
Hoffe, das hilft.
-
Verwende eine SDI Anwednung mit CFormView und switche die Forms entrsprechend dieses Samples.
http://support.microsoft.com/kb/199515/en-us