CTabCtrl -> Seiten aufbauen

bw1faeh0

Grünschnabel
Ok, sorry. Das Problem konnte an einer anderen Stelle gelöst werden...

man sollte auch ein m_register_01.Create() durchführen....

mfg

Christian Flämig
 

chefsalat-

Mitglied
Ist meistens ganz praktisch, ja ;-)

Falls noch jemand diesen Thread benötigt, hier ist noch der Teil, zum Umschalten der Tabs (es gibt sicher auch andere Möglichkeiten):

C++:
void OnSelchangeTabParameter(NMHDR* pNMHDR, LRESULT* pResult) {
	CTabCtrl* pTabCtrl = (CTabCtrl*)GetDlgItem(IDC_TAB_PARAMETER);
	int iCount = pTabCtrl->GetCurSel();

	//Alle Tabs verstecken
	mDlg_Tab1.ShowWindow(SW_HIDE);
	mDlg_Tab2.ShowWindow(SW_HIDE);
	mDlg_Tab3.ShowWindow(SW_HIDE);
	mDlg_Tab4.ShowWindow(SW_HIDE);
	
	//Nur das gewünschte Tab initialisieren und anzeigen.
	switch(iCount) {
		case 0:
			mDlg_Tab1.init();
			mDlg_Tab1.ShowWindow(SW_SHOW);
			break;
		case 1:
			mDlg_Tab2.init();
			mDlg_Tab2.ShowWindow(SW_SHOW);
			break;
		case 2:
			mDlg_Tab3.init();
			mDlg_Tab3.ShowWindow(SW_SHOW);
			break;
		case 3:
			mDlg_Tab4.init();
			mDlg_Tab4.ShowWindow(SW_SHOW);
			break;
		default:
			break;
	}

	*pResult = 0;
}

Gruß chefsalat-
 

sun-fire

Grünschnabel
Hallo Leute,

dieser Thread ist zwar schon mega-alt, das Thema dafür umso aktueller... ;-)
Ich habe versucht, die Lösung von MCoder umzusetzen. Dabei tauchen leider ein paar Schwierigkeiten auf:

Wenn ich das Erzeugen des Dialoges so schreibe wie MCoder
Code:
m_TabDlg1.Create(CTabDlg1::IDD, m_FormTab);
dann gibt mir der Compiler folgenden Fehler:
error C2664: 'BOOL CDialog::Create(LPCTSTR,CWnd *)': Konvertierung des Parameters 1 von '' in 'LPCTSTR' nicht möglich
1> Die Konvertierung eines ganzzahligen Typs in einen Zeigertyp erfordert ein reinterpret_cast-Operator oder eine Typumwandlung im C- oder Funktionsformat

Ich verstehe an diesem Fehler eins nicht: warum nimmt er plötzlich eine andere Implementierung von CDialog::Create, obwohl der zweite Parameter in beiden Formen der Funktion gleich ist?

Schreibe ich die gleiche Zeile so:
Code:
m_TabDlg1.Create(CTabDlg1::IDD, &m_FormTab);
gibt es zwar keinen Compilerfehler, aber später beim Umschalten der Tabs gibt es eine Assertion, weil hier:
Code:
pWnd = reinterpret_cast<CWnd*> (item.lParam);
zwar ein CWnd-Pointer zurückkommt, bei dem m_hWnd aber 0 ist.
Das wiederum führt dazu, dass in der nächsten Zeile
Code:
pWnd->ShowWindow(SW_HIDE);
die Funktion ShowWindow eine Assertion schmeißt.

Ich hoffe, das war jetzt verständlich und jemand kann mit helfen. Wie gesagt: Grundlage ist der Code von MCoder am Anfang des Threads.

Viele Grüße mit der Hoffnung auf Hilfe
Tanja
 

MCoder

Erfahrenes Mitglied
Hallo Tanja,

mit einem aktuellen Visual Studio gibt's da wohl eine Änderung hinsichtlich des zweiten Parameters.
So sollte es funktionieren:
C++:
m_TabDlg1.Create(CTabDlg1::IDD, CWnd::FromHandle(m_FormTab.m_hWnd));
Gruß
MCoder
 

sun-fire

Grünschnabel
Hallo MCoder,

vielen Dank für Deine Antwort, das hat geholfen. Jetzt muss ich mich nur noch ein wenig mit der Positionierung herumschlagen... ;)

Viele Grüße
Tanja
 

Neue Beiträge