ChildDialog bringt Anwendung zum Absturz

Quick_Mik

Mitglied
Hallo.

Ich habe eine dialogfeldbasierte Anwendung erstellt. Im Hauptdialog sitzt ein TabCtrl, welches mehrere Items hat. Jedes Item stellt bei Aktivierung nen anderen ChildDialog dar.

Soweit funktioniert es.

Wenn ich nun allerdings in dem Child Dialog irgendetwas mache, Button klicken, Tab Taste drücken, in ein Edit Feld klicken, ... stürzt die komplette Anwendung ab und ist nur noch über TaskManager zu beenden. :suspekt:

Die Child Dialoge sind als solche gekennzeichnet und "Übergeordnete steuern" ist ebenfalls aktiviert.

Jemand noch ne Idee, warum dies so ist?

Die Dialoge zeige ich folgendermaßen im OnSelchangeTab an:
Code:
		proddlg.Create(MAKEINTRESOURCE(IDD_PROD),&m_TabCtrl);
		proddlg.SetWindowPos(0,6,25,400,200,SWP_NOSIZE);
		proddlg.ShowWindow(SW_SHOW);

Wäre für Hinweise dankbar.

Gruß

M.
 
Ich denke, das Problem besteht darin, dass nach Erzeugung des Dialoges auf dem Tab Reiter wieder zum Hauptdialog zurückgesprungen wird.

Code:
void CCalcToolDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) 
{
	int		selection=0;

	selection = m_TabCtrl.GetCurSel();

	switch(selection)
	{
	case 0:
		switch(m_actual)
		{
		case 1:
			flugdlg.DestroyWindow();
			break;
		case 2:
			baudlg.DestroyWindow();
			break;
		default:
			break;
		}
		m_actual = 0;
		proddlg.Create(MAKEINTRESOURCE(IDD_PROD),&m_TabCtrl);
		proddlg.SetWindowPos(0,6,35,400,200,SWP_NOSIZE);
		proddlg.ShowWindow(SW_SHOW);
		break;
	case 1:
		switch(m_actual)
		{
		case 0:
			proddlg.DestroyWindow();
			break;
		case 2:
			baudlg.DestroyWindow();
			break;
		default:
			break;
		}
		m_actual = 1;
		flugdlg.Create(MAKEINTRESOURCE(IDD_FLUG),&m_TabCtrl);
		flugdlg.SetWindowPos(0,6,35,400,200,SWP_NOSIZE);
		flugdlg.ShowWindow(SW_SHOW);
		break;
	case 2:
		switch(m_actual)
		{
		case 0:
			proddlg.DestroyWindow();
			break;
		case 1:
			flugdlg.DestroyWindow();
			break;
		default:
			break;
		}
		m_actual = 2;
		baudlg.Create(MAKEINTRESOURCE(IDD_BAUZEIT),&m_TabCtrl);
		baudlg.SetWindowPos(0,6,35,400,200,SWP_NOSIZE);
		baudlg.ShowWindow(SW_SHOW);
		break;
	default:
		break;
	}
	
	*pResult = 0;
}

Wie kann ich in dem untergeordneten Dialog verbleiben und trotzdem das TabCtrl auf Tab Wechsel überwachen?

Gruß

M.
 
Frage: Was meinst du mit zum Hauptdialog zurückgesprungen?

Wenn das MFC debug ist, dann gibt's ein Problem mit DestroyWindow. MS hat ein assert in jede Funktion eingebaut, die auf das HWND zugreift. Wenn das erste mal onselchange kommt, hat der zu zerstörende Dialog gar kein HWND und Ratzfatzausdiemaus.

Einfach vor DestroyWindow prüfen, of GetSafeHwnd() ungleich NULL oder 0 ist.
 
Problem hat sich erledigt.

Wenn ich das Häkchen bei "Übergeordnete steuern" bei den Child Dialogen wegnehme, dann funktioniert es problemlos.

Hatte mal irgendwo gelesen, dass das Häkchen gesetzt sein muss, damit im Child Dialog mit TabTaste gesprungen werden kann. Ist aber wohl Schwachsinn... :rolleyes:

Trotzdem Danke. Deine Antwort war die einzige in 3 Foren!

Gruß

M.
 

Neue Beiträge

Zurück