Dialog anzeigen

Fat-Z

Mitglied
Hi Leute, eigentlich bin ich Datawarehouse Manager, schule mich aber zurzeit ein bisschen in C++/MFC (Visual Studio 6.0) ein. In meinem jetzigen Projekt will ich in MFC/SDI das sich im Hauptfenster auf Knopfdruck ein neuer Dialog öffnet.
Die Aufforderung soll hier drin stehen:
Code:
case ID_TEST_DIALOG_OEFFNEN:
    //befehl zum öffnen von neuen Dialog!
break;

Danke schoneinmal im Voraus
 
Zuletzt bearbeitet:
Prinzipiell ganz einfach. Du mußt allerdings den Dialog erstmal im Ressourceneditor erstellen (unter 'Dialog' 'Neuen Dialog einfügen' und ihm eine ID geben, dann Dialogelemente hinzufügen) und ihm eine Klasse zuordnen (Klassenassistent->Neue Klasse erstellen (z.B. CMyDialog, ist dann abgeleitet von CDialog)). Dann legst Du in Deiner Funktion eine Instanz des Dialogs an und öffnest ihn dorch den Aufruf von CMyDialog::DoModal(). Der Rückgabewert dieser Funktion läßt dann Rückschlüsse auf das Ergebnis des Dialogs zu:
Code:
CMyDialog MeinDialog;
...
switch(irgendwas)
{
...
case ID_TEST_DIALOG_OEFFNEN:
  if(MeinDialog.DoModal() == IDOK)
  {
    //Dialog mit OK beendet, Werte aus dem Dialog lesen
  }
  break;
...
}
Genauer: DoModal gibt das zurück, was die Dialogfunktion EndDialog(...) als Parameter bekommt. Wenn Du den OK-Button im Dialog drückst, wird im allgemeinen die Dialogfunktion OnOK aufgerufen, die EndDialog mit dem Parameter IDOK aufruft, wobei IDOK eine Windows-SDK-Konstante ist. Wenn du den Abbrechen-Button drückst, wird im Allgemeinen die Dialogfunktion OnCancel aufgerufen, welche ihrerseits EndDialog mit dem Parameter IDCANCEL aufruft. Du kannst dir natürlich im Dialog eigene Funktionen zum Beenden schreiben, die andere Werte zurückgeben.
Was Du noch beachten solltest ist, daß die Fensterobjekte eines Dialogs nach seine Beendigung nicht mehr existieren. Du kannst also den Inhalt eines Edit-Feldes dann nicht mehr auslesen. Das mußt du also in den Beendigungsfunktionen tun und die Werte, die du nachher haben willst in Membervariablen Deiner Dialogklasse schreiben.
 
Danke jokey2! Ich hatte schon gedacht dass mir überhaupt keiner mehr schreibt ;)

Nun habe ich wieder ein Problem. Ich habe eine ganz normale Dialogbasierende MFC-Anwendung erstellt und möchte dass sich nun hier mit einem Klick auf einen Button ein neues Fenster öffnet. Neue Klasse anlegen und so weiter ist kein Problem. Nur der direkte Befehl zum öffnen scheint mir noch nicht so ganz klar. Vielleicht kannst du mir wieder weiterhelfen ;-)

Code:
void CTestDialogDlg::OnTestKlick() 
{
     //Befehl zum öffnen eines Dialogs
}
 
Code:
void CTestDialogDlg::OnTestKlick() 
{
     //Befehl zum öffnen eines Dialogs
    CMyDialog MeinDialog;

    MeinDialog.DoModal();
}
 
Danke für die Antwort aber C++ will nicht, so wie ich es will. :(
Es kommen dann immer der Fehler:
'CMyDialog' : nichtdeklarierter Bezeichner
Syntaxfehler : Fehlendes ';' vor Bezeichner 'MyDialog'
'MyDialog' : nichtdeklarierter Bezeichner
Der linke Teil von '.DoModal' muss eine Klasse/Struktur/Union sein

Bei mir ist der Code dann so:
C++:
void CTestDialogDlg::OnKlick1() 
{
    CMyDialog MyDialog;
    MyDialog.DoModal(); 
}

'MyDialog' ist die Klasse von meinem neu angelegten Dialog.
Wenn du es ein bisschen besser beschreiben könntest? Wäre echt nett.
Ich hoffe dass ich dich nicht all zu sehr stresse aber dass bisschen Pascal was ich damals gelernt habe hilft mir bei C++ auch nicht viel.

MFG Fat-Z ;)
 
Zuletzt bearbeitet:
Du mußt natürlich die Headerdatei Deines Dialoges in der aufrufenden Datei einbinden, z.B.:
Code:
#include "MyDialog.h"
 
Danke! Habe ich ganz vergessen. Tja, dass sind halt die kleinen Fehler die einem die Nerven rauben! :rolleyes:

Fat-Z


.:: CLOSED ::.
 

Neue Beiträge

Zurück