Dialog und Registerdialog

NinjaOne

Erfahrenes Mitglied
Hallo,
ich arbeite mit VC6 und hab da mal ne Frage ?
Habe eine Dialogbasierte Anwendung erstellt und möcht neben anderen Objekten auch einen Registerdialog einfügen. Im Ressourceneditor kann ich einen Registerdialog einfügen, aber ich kann ihn nicht bearbeiten. Wie kann ich die erstellten CPropertyPage Objekte in das CTagCtlr Objekt aufnehmen.

Schon mal danke für eure Antworten.
 
Das ist fein, seit VC6 gibt's da keine andere Möglichkeit, als das im Programm zu machen.

Wenn dein RegisterDialog erstellt wird (CPropertySheet vermute ich), dann kannst du deine Unterdialoge (statt von CDialog sollten die von CPropertyPage abgeleitet sein) mittels AddPage hinzufügen.

Danach wie gehabt das DoModal vom RegisterDialog aufrufen.

Falls der RegisterDialog nicht modal ist, sollte das AddPage vor dem Create passieren (OnInitDialog vom Hauptdialog sollte eigentlich klappen).
 
Hallo Endurion,
mit CPropertySheet und AddPage hab ich das schon hinbekommen.
Aber wenn ich ein CTabCtrl Objekt habe, wie kann ich da die CPropertyPage Objekte integrieren. Der Dialogeditor stellt mir nur das Objekt zur verfügung. Das muß doch irgendwie gehen ?
Möchte mämlich nur einen Teil meines Dialogs mit einem Registerdialog belegen !

Trotzdem danke für deine Antwort und wer weiß ob Du das nicht auch weißt?

Bye.
 
Ist ein bisschen kniffliger, daran hat bei MFC keiner gedacht, deshalb muss man (fast) alles selbst machen. Das sagt MSDN dazu:

After creating the tab control (CTabCtrl), add as many tabs as you need.

To add a tab item

Prepare a TCITEM structure.
Call CTabCtrl::InsertItem, passing the structure.
Repeat steps 1 and 2 for additional tab items.
For more information, see Creating a Tab Control in the Platform SDK.
 
Hallo.

Da ich persönlich aufgrund oben genannter Problematik nicht von PropPage überzeugt bin, mache ich es ebenfalls händisch, allerdings dann über Child Dialoge, welche ich in den Reitern anzeige. Das ganze sieht dann in etwa wie folgt aus:
Code:
        // Dieser Teil steht im OnInitDialog
	//Tabreiter erzeugen
	m_TabCtrl.InsertItem( 0, "Produktion / Verbrauch");
	m_TabCtrl.InsertItem( 1, "Zeitberechnung");
	m_TabCtrl.InsertItem( 2, "Kostenberechnung");

	//1.Tab mit Dialog füllen
	proddlg.Create(MAKEINTRESOURCE(IDD_PROD),&m_TabCtrl);
	proddlg.SetWindowPos(0,6,35,400,200,SWP_NOSIZE);
	proddlg.ShowWindow(SW_SHOW);
	m_actual = 0; //zum merken des zuletzt angezeigten Tabs bei Tabwechsel

Beim TabWechsel musst du dann erst das alte Window auflösen oder ausblenden (SW_HIDE) um auf dem neuen Tab das zugehörige Window anzeigen zu können. Ansonsten stehen die Steuerelemente völlig durcheinander auf einem Tab.
Code:
void CCalcToolDlg::OnSelchangeTab(NMHDR* pNMHDR, LRESULT* pResult) 
{
	int		selection=0;

	selection = m_TabCtrl.GetCurSel();

	switch(selection)
	{
	case 0:
		switch(m_actual)
		{
		case 1:
			zeitdlg.DestroyWindow();
			break;
		case 2:
			kostdlg.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_ZEIT),&m_TabCtrl);
		flugdlg.SetWindowPos(0,6,35,400,200,SWP_NOSIZE);
		flugdlg.ShowWindow(SW_SHOW);
		break;
.
.

Ist zwar was an Arbeit, aber es hat auch Vorteile. Du kannst ganz gemütlich deine Child Dialoge zusammenklicken und mit Funktionalitäten füllen, kannst die Dialoge vorher testen und kannst meiner Meinung nach einfacher Änderungen in den einzelnen Dialogen vornehmen.

Beim Erstellen der Child Dialoge solltest Du daruaf achten, dass diese als solche gekennzeichnet sind (untergeordnet).

Gruß

M.
 
Ich danke euch ersteinmal für eure Antworten,
muß mich erstmal mit euren Anregungen herumschlagen.
Werde alles mal testen, kann etwas dauern.

Großen Dank schon mal und wenn jemanden noch was einfacheres einfällt nur zu.
bye
 
Zurück