Dialog öffnet sich beim Beenden eines CPropertySheet Dialogs
-
Hi,
ich habe ein MFC Dialog Projekt erstellt und zusätzliche Dialoge eingefügt um Reiter einzufügen. Ich würde gerne mein Programm sofort in einem Dialogfenster mir Reitern starten.Im OnInitDialog() habe ich folgendes hinzugefügt:
CPropertySheet dlg(_T("Artikel Informationen"), this); CSheetMain Main; CSheetTab1 Tab1; dlg.AddPage(&Main); dlg.AddPage(&Tab1); dlg.DoModal();
Wenn ich nun mein Programm ausführe, startet auch sofort der Dialog mit den Reitern.
Leider öffnet sich beim beenden des Dialogs, noch einmal der "Default-Dialog".
Wie kann ich das unterbinden, bzw. anders implementieren?
Edit: Am besten wäre es wenn im Default-Dialog die Reiter implementiert werden. Mir viel nämlich gerade auf, dass im Reiter-Dialog auch die System-Menüs zum minimieren fehlen.
Gruß, Taz
-
MyPropertySheet.h
class CMyPropertySheet : public CPropertySheet { DECLARE_DYNAMIC(CMyPropertySheet) public: CMyPropertySheet(LPCTSTR pszCaption, CWnd* pParentWnd = NULL, UINT iSelectPage = 0); virtual ~CMyPropertySheet(); protected: DECLARE_MESSAGE_MAP() virtual void PostNcDestroy(); CPage1 *m_pPage1; CPage2 *m_pPage2; };
MyPropertySheet.cpp
IMPLEMENT_DYNAMIC(CMyPropertySheet, CPropertySheet) CMyPropertySheet::CMyPropertySheet(LPCTSTR pszCaption, CWnd* pParentWnd, UINT iSelectPage) : CPropertySheet(pszCaption, pParentWnd, iSelectPage) , m_pPage1( NULL ) , m_pPage2( NULL ) { m_pPage1 = new CPage1; AddPage(m_pPage1); m_pPage2 = new CPage2; AddPage(m_pPage2); } void CMyPropertySheet::PostNcDestroy() { CPropertySheet::PostNcDestroy(); for (int i = 0; i < GetPageCount(); i++) delete GetPage(i); delete this; }
MyDialog.h
CMyPropertySheet *m_pPropSheet;
MyDialog.cpp
in OnInitDialog():// hier wird das PropertySheet erzeugt m_pPropSheet = new CMyPropertySheet( _T(""), this, 0 ); m_pPropSheet->Create( this, WS_CHILD | WS_VISIBLE, 0 ); m_pPropSheet->ModifyStyleEx( 0, WS_EX_CONTROLPARENT ); m_pPropSheet->ModifyStyle( 0, WS_TABSTOP ); // Größe an Dialogfenster anpassen // IDC_PROPERTY_SHEET ist ein leeres CPictureControl // mit der Größe musst du etwas experimentieren CRect rcSheet; GetDlgItem( IDC_PROPERTY_SHEET )->GetWindowRect( &rcSheet ); ScreenToClient( &rcSheet ); m_pPropSheet->SetWindowPos( NULL, rcSheet.left-7, rcSheet.top-7, 0, 0, SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE );
-
Ist CPage1 eine neuer Dialog mit Klasse vom Basistyp CPropertyPage?
Edit: Okay, ich habe es nun hinbekommen. Weiß auch nicht, wo der Fehler anfangs lag...
Könntest du wenn diese Stelle noch einmal ein wenig erläutern?
m_pPropSheet = new CMyPropertySheet( _T(""), this, 0 ); m_pPropSheet->Create( this, WS_CHILD | WS_VISIBLE, 0 );
Ich bin noch sehr neu in MFC.
m_pPropSheet = new CMyPropertySheet(_T(""), this, 0);
Es wird ein neues Objekt vom Typ CMyPropertySheet erstellt. Bei den Parametern bin ich mir nicht sicher. Beim ersten dachte ich, dass sich damit die Bezeichung des Tabs steuern lässt, das funktioniert aber nicht.
m_pPropSheet->Create(this, WS_CHILD | WS_VISIBLE, 0)
Hier wird der Dialog als "Kind" erstellt. Das Elternteil ist dann this (Ausgangsdialog) oder?
Wird
CMyPropertySheet::PostNcDestroy
beim beenden des Dialogs aufgerufen?
Könnte man es auch in den Destruktor packen?Gruß, Taz
-
class CPage1 : public CPropertyPage
Tabtitel = Titel von CPropertyPage, z.B CPage1.
Alle deine Fragen sollten von der Doku beantwortet werden:
http://msdn.microsoft.com/en-us/library/491c89bk(v=vs.80).aspx
http://msdn.microsoft.com/en-us/library/2zw820e5(v=VS.80).aspx
http://msdn.microsoft.com/en-us/library/5zba4hah(v=vs.80).aspx