Forum: PC-Programmierung Dialogfenster via Button öffnen


von mfc noob (Gast)


Lesenswert?

Hallo.

Ich habe mittels Visual C++ MFC einen Dialogfenster erstellt, in dem 
schon einige Funktionalitäten eingebettet sind.
Ich will nun mittels Button ein neues Dialogfenster (nicht-modal!) 
öffnen.
Ich habe bereits mittels Ressourceneditor einen entsprechenden Dialog 
<IDD_TEST> erstellt.
Wie rufe ich jetzt den neuen Dialog auf?
1
void CProg1Dlg::OnBnClickedButton1()
2
{
3
?? 
4
//"IDD_TEST"
5
}

von Doktor Gnadenlos (Gast)


Lesenswert?

ein nichtmodaler Dialo ist etwas umständlicher zu programmieren.

in der headerdatei der ansichtsklasse muss eine membervariable 
deklariert werden :


public:
   CDialog * m_pDialog;


Im Konstruktor der Ansichtsklasse muss erscheinen :

CTestView::CTestView()
{
   m_pDialog = new CDialogNeu(this);
}


Im Destruktor dieses :

CTestView::~CTestView()
{
   delete m_pDialog;
}


Der Aufruf geschieht dann in Deiner OnBnClickedButton1()-Funktion mit

   if (m_pDialog->GetSafeHwnd() == 0)
      m_pDialog->Create(IDD_TEST);

von mfc noob (Gast)


Lesenswert?

Vielen Dank für die schnelle Antwort, allerdings habe ich noch Probleme, 
wo genau ich die Ergänzungen einfügen muss.

Mein Projekt besteht aus folgenden Dateien:
1
Header:
2
3
Prog.h
4
ProgDlg.h
5
Resource.h
6
stdafx.h
7
targetver.h
8
9
Quell:
10
11
Prog.cpp
12
ProgDlg.cpp
13
stdafx.cpp
An Dialogfenstern existieren nur IDD_PROG_DIALOG sowie IDD_TEST.

Wo muss zunächst die Membervariable eingefügt werden? Bezieht sich 
"[...] in der headerdatei der ansichtsklasse"
dann auf die ProgDlg.h?

Oder muss ich mittels des Ressourceneditor für IDD_TEST erst eine eigene 
Klasse (zb. "CTest") anlegen, die von CDialog abgeleitet ist? Dabei 
würden die Dateien "Test.h" sowie "Test.cpp" erzeugt. Müssen dann dort 
die Member-Var sowie Konst/Destruktoren eingefügt werden?

von M. H. (doktorgnadenlos)


Lesenswert?

Ich sehe, Dein Projekt hat kein Fenster, besteht also nur aus einem oder 
mehreren Dialogen.

Ohne das überprüft zu haben, die Membervariabel kannst Du vermutlich in 
ProgDlg.h einfügen. Allerdings übersichtlicher ist es, wenn Du mit dem 
Klassenassistenen eine eigene von CDialog abgeleitete Klasse erzeugst 
(durch Doppelklick auf das Dialogfenster im Resourcen Editor).

Hier noch ein Link, wo Du auf alle Fragen zu MFC mit Stichwortsuche 
weiterkommst :

http://www.c-plusplus.de/forum/search-var-.html

Unter "Forum" -> "MFC (Visual C++)" einstellen.
Dort werden sie geholfen.

Grüße.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.