[C/C++] Wie zeige ich einen selbsterstellten Dialog an in Visual Studio 2005 via MFC?

PuMi2006

Grünschnabel
Hi,

Ich habe mich im Internet umgesehen ob es eine Lösung gibt. Ich habe auch in der MSDN Library von Visual Studio 2005 nachgesehen.

Ich bin Anfänger und versuche in einem MFC Programm einen Dialog anzuzeigen, welchen ich selbst erstellt habe. Die Recourse heißt IDD_DLG_UPDATE und die Klasse CUpdate. Meine Frage ist es jetzt, wie erkläre ich jetzt meinem Programm, wenn ein User auf dem Menüpunkt "Update" klickt, das er dann das Dialog erzeugt?

Über eine schnelle Hilfe wäre ich dankbar.

Mein Code zurzeit in der Funktion void Dlg::OnHilfeUpdate()

void Dlg::OnHilfeUpdate()
{
CUpdate *Dialog;
Dialog->Create(IDD_DLG_UPDATE, this);
Dialog->ShowWindow(SW_SHOW);
}

MfG, ;) PuMi2006
 
Hi,

void Dlg::OnHilfeUpdate()
{
CUpdate *Dialog;
Dialog->Create(IDD_DLG_UPDATE, this);
Dialog->ShowWindow(SW_SHOW);
}

Was für eine Klasse ist Dlg(this-Zeiger)?

die einfachste Lösung (das Dialogfeld wird modal angezeigt)

void Dlg::OnHilfeUpdate()
{
CUpdate Dialog;
Dialog.DoModal(); // Die Funktion liefert einen Rückgabewert, den kannst abfangen
}
 
Hallo!

Danke für den Tipp! Und er funktioniert richtig!
Nochmals Danke ;) !

Dlg::xxx :

Das Dlg steht für meinen Hauptdialog, welcher also als erster ausgeführt wird.
 
Update-Dialog nicht modal:


CUpdate *pUpdateDlg; // als Klassenvariable der Dlg-Klasse


CDlg::CDlg(void)
{
pUpdateDlg = NULL;
}

CDlg::~CDlg(void)
{
if (pUpdateDlg != NULL)
{
delete pUpdateDlg;
}

}
void Dlg::OnHilfeUpdate()
{
if (pUpdateDlg == NULL)
{
BOOL bOK = pUpdateDlg->Create(IDD_DLG_UPDATE, this);
if(bOK == FALSE) //Create failed.
AfxMessageBox("Error creating Dialog");
}
pUpdateDlg->ShowWindow(SW_SHOW);
}
 
Hallo ich hab da ein Problem passend zum Thema:

Code:
		m_pMainWnd = &m_cStartWindowDlg;
		nResponse = m_cStartWindowDlg.DoModal();
		if(nResponse == IDOK)
		{
			
			m_pMainWnd = &m_cInstallPathesDlg;
			nResponse = m_cInstallPathesDlg.DoModal();
			if(nResponse == IDOK)

Hab nen kleinen Ausschnitt gepostet.
Das erste Fenster wird angezeigt, jedoch das zweite liefert mir sofort "-1", was bedeutet dass das Fenster nicht erzeugt werden konnte...

Dabei untersdcheiden die sich nicht, was ich nicht verstehe :((
Bitte um Hilfe^^

EDIT:

Habs herausgefunden:

Undzwar muss der Dialog der als erstes angezeigt wurde daran gehindert werden eine "PostQuitMessage()" an
das App zu senden, was sich folgendermaßen realisieren lässt:
Einfach vor dem Zerstören des Dialogs den m_pMainWnd Pointer auf NULL setzen...
Code:
         void CMyDialog::OnNcDestroy()
         {
            AfxGetApp()->m_pMainWnd = NULL;
            CDialog::OnNcDestroy();
         }
 
Zuletzt bearbeitet:
Zurück