MessageBox nicht mehr nutzbar nach DoModal()

Padd_y

Mitglied
Hallo..
Ich versuche gerade vergeblich, zu begreifen, was da vor sich geht..

In der InitInstance-Methode meiner von CWinApp abgeleiteten Hauptklasse gebe ich zunächst erfolgreich eine Messagebox aus:

MessageBox(0,"Boxtext","Start-Infos",MB_OK);

Danach übergebe ich die Steuerung an das erste Window: (wird alles ja standardmäßig so vom Class-Wizard erzeugt)

int nResponse = dlg.DoModal();

Nun möchte ich zur Beendigung des Programmes nochmals eine MessageBox ausgeben.

Geht aber nicht mehr. Es passiert einfach nichts, eine weitere MessageBox-Anweisung wird nicht angezeigt.

Der Returncode ist übrigens '1'. Allerdings liefert die funktionierende MessageBox ebenfalls '1'.
Hilft also nicht weiter.

Versteht das jemand ?
Danke
 
Hallo,

wenn das Hauptfenster der Applikation zerstört wird, wird auch gleichzeitig der Thread der Applikation beendet. Alle danach noch erzeugten Fenster werden dadurch sofort wieder zerstört. Du kannst das Problem umgehen, wenn du die Zeile:
C++:
m_pMainWnd = &dlg;
entfernst bzw. auskommentierst.

Gruß
MCoder
 
Besten Dank für den schnellen Tipp - klappt :)

Nachvollziehen kann ich das Ganze zwar nicht, aber man muß ja nicht alles verstehen..
..schließlich hat das Objekt 'dlg' eine längere Lebensdauer.
Code:
CAskShiDlg dlg(&db);
m_pMainWnd = &dlg; 
MessageBox(0,"Boxtext1","Start-Infos",MB_OK);
int nResponse = dlg.DoModal();
MessageBox(0,"Boxtext2","Ende-Infos",MB_OK);

Zum Zeitpunkt der zweiten Messagebox existiert 'dlg' nach meinem Einblick in den Debugger immer noch.
Es ist ja auch die gleiche Klammerebene. Das Verschwinden kann, da 'dlg' ja nicht mit 'new' angelegt wurde,
m.E. doch erst nach Verlassen der Klammerebene (bzw. hier InitInstance) geschehen.

Wenn das Funktionieren der MessageBox also von 'dlg' abhängen sollte (was ich auch nicht erwartet hätte),
dann müßte es nach meinem Verständnis auch nach DoModal() noch möglich sein, da 'dlg' noch existiert.

Aber ich bin halt Anfänger.. wollte das aber trotzdem noch loswerden ;-)
 
Ist aber doch nicht so ganz logisch, da das Dialogfenster vor dem Aufruf von DoModal auch noch nicht existiert.
 
Unbedingt logisch ist die MFC nicht in jedem Fall :)
In der MSDN steht zumindest: Wenn der Applikationsklasse ein Hauptfenster zugewiesen wurde (m_pMainWnd = ...) und dieses zerstört wird, werden alle danach angelegten Fenster sofort wieder platt gemacht. Warum das so sein muss und was genau dahintersteckt, weiß ich nicht.

Gruß
MCoder
 

Neue Beiträge

Zurück