///////////////////////////////////////////////////////////////////////////// // // Copyright (c) 1996-1999 Microsoft Corporation // // Module Name: // AtlBasePropPage.cpp // // Description: // Definition of the CBasePropertyPageWindow and CBasePropertyPageImpl // classes. // // Implementation File: // None. // // Author: // David Potter (davidp) February 26, 1998 // // Revision History: // // Notes: // ///////////////////////////////////////////////////////////////////////////// #ifndef __ATLBASEPROPPAGE_H_ #define __ATLBASEPROPPAGE_H_ ///////////////////////////////////////////////////////////////////////////// // Forward Class Declarations ///////////////////////////////////////////////////////////////////////////// class CBasePropertyPageWindow; class CStaticPropertyPageWindow; class CDynamicPropertyPageWindow; class CExtensionPropertyPageWindow; template < class T, class TWin > class CBasePropertyPageImpl; template < class T > class CStaticPropertyPageImpl; template < class T > class CDynamicPropertyPageImpl; template < class T > class CExtensionPropertyPageImpl; ///////////////////////////////////////////////////////////////////////////// // External Class Declarations ///////////////////////////////////////////////////////////////////////////// class CBasePropertySheetWindow; ///////////////////////////////////////////////////////////////////////////// // Include Files ///////////////////////////////////////////////////////////////////////////// #ifndef __ATLBASEPAGE_H_ #include "AtlBasePage.h" // for CBasePageWindow, CBasePageImpl #endif #ifndef __ATLDBGWIN_H_ #include "AtlDbgWin.h" // for debugging definitions #endif ///////////////////////////////////////////////////////////////////////////// // Type Definitions ///////////////////////////////////////////////////////////////////////////// typedef std::list< CBasePropertyPageWindow * > CPropertyPageList; typedef std::list< CStaticPropertyPageWindow * > CStaticPropertyPageList; typedef std::list< CDynamicPropertyPageWindow * > CDynamicPropertyPageList; typedef std::list< CExtensionPropertyPageWindow * > CExtensionPropertyPageList; ///////////////////////////////////////////////////////////////////////////// //++ // // class CBasePropertyPageWindow // // Description: // Base property sheet page window for standard property sheets. // // Inheritance: // CBasePropertyPageWindow // CBasePageWindow // CPropertyPageWindow // //-- ///////////////////////////////////////////////////////////////////////////// class CBasePropertyPageWindow : public CBasePageWindow { typedef CBasePageWindow baseClass; public: // // Construction // // Standard constructor CBasePropertyPageWindow( HWND hWnd = NULL ) : baseClass( hWnd ) { } //*** CBasePropertyPageWindow() public: // // Message handler functions. // // Handler for PSN_KILLACTIVE BOOL OnKillActive( void ) { return UpdateData( TRUE /*bSaveAndValidate*/ ); } //*** OnKillActive() // Implementation protected: // Return pointer to the base sheet object CBasePropertySheetWindow * Pbsht( void ) const { return (CBasePropertySheetWindow *) Psht(); } //*** Pbsht() public: }; //*** class CBasePropertyPageWindow ///////////////////////////////////////////////////////////////////////////// //++ // // class CStaticPropertyPageWindow // // Description: // Base property sheet page window for pages added to a standard // property sheet before the call to PropertySheet(). This page cannot // be removed from the sheet. // // Inheritance: // CStaticPropertyPageWindow // CBasePropertyPageWindow // CBasePageWindow // CPropertyPageWindow // //-- ///////////////////////////////////////////////////////////////////////////// class CStaticPropertyPageWindow : public CBasePropertyPageWindow { typedef CBasePropertyPageWindow baseClass; public: // // Construction // // Standard constructor CStaticPropertyPageWindow( HWND hWnd = NULL ) : baseClass( hWnd ) { } //*** CStaticPropertyPageWindow() }; //*** class CStaticPropertyPageWindow ///////////////////////////////////////////////////////////////////////////// //++ // // class CDynamicPropertyPageWindow // // Description: // Base property sheet page window for pages added to a standard // property sheet after the call to PropertySheet(). This page may be // removed from the sheet. // // Inheritance: // CDynamicPropertyPageWindow // CBasePropertyPageWindow // CBasePageWindow // CPropertyPageWindow // //-- ///////////////////////////////////////////////////////////////////////////// class CDynamicPropertyPageWindow : public CBasePropertyPageWindow { typedef CBasePropertyPageWindow baseClass; public: // // Construction // // Standard constructor CDynamicPropertyPageWindow( HWND hWnd = NULL ) : baseClass( hWnd ) , m_hpage( NULL ) , m_bPageAddedToSheet( FALSE ) { } //*** CDynamicPropertyPageWindow() // Destructor ~CDynamicPropertyPageWindow( void ) { // // Destroy the page if it hasn't been added to the sheet yet. // If it has been added to the sheet, the sheet will destroy it. // if ( (m_hpage != NULL) && ! m_bPageAddedToSheet ) { DestroyPropertySheetPage( m_hpage ); m_hpage = NULL; } // if: page not deleted yet } //*** ~CDynamicPropertyPageWindow() // Create the page virtual DWORD ScCreatePage( void ) = 0; protected: HPROPSHEETPAGE m_hpage; BOOL m_bPageAddedToSheet; public: // Property page handle HPROPSHEETPAGE Hpage( void ) const { return m_hpage; } // Set whether the page has been added to the sheet or not void SetPageAdded( IN BOOL bAdded = TRUE ) { m_bPageAddedToSheet = bAdded; if ( ! bAdded ) { m_hpage = NULL; } // if: removing page } //*** SetPageAdded() }; //*** class CDynamicPropertyPageWindow ///////////////////////////////////////////////////////////////////////////// //++ // // class CExtensionWizardPageWindow // // Description: // Base property sheet page window for pages added to a standard // property sheet after the call to PropertySheet() identified as an // extension to the list of standard pages (whether static or dynamic). // This page may be removed from the sheet. // // Inheritance: // CExtensionPropertyPageWindow // CDynamicPropertyPageWindow // CBasePropertyPageWindow // CBasePageWindow // CPropertyPageWindow // //-- ///////////////////////////////////////////////////////////////////////////// class CExtensionPropertyPageWindow : public CDynamicPropertyPageWindow { typedef CDynamicPropertyPageWindow baseClass; public: // // Construction // // Standard constructor CExtensionPropertyPageWindow( HWND hWnd = NULL ) : baseClass( hWnd ) { } //*** CExtensionPropertyPageWindow() }; //*** class CExtensionPropertyPageWindow ///////////////////////////////////////////////////////////////////////////// //++ // // class CBasePropertyPageImpl // // Description: // Base property sheet page implementation for standard property sheets. // // Inheritance: // CBasePropertyPageImpl< T, TWin > // CBasePageImpl< T, TWin > // CPropertyPageImpl< T, TWin > // // ... // CBasePropertyPageWindow // CBasePageWindow // CPropertyPageWindow // //-- ///////////////////////////////////////////////////////////////////////////// template < class T, class TWin = CBasePropertyPageWindow > class CBasePropertyPageImpl : public CBasePageImpl< T, TWin > { typedef CBasePropertyPageImpl< T, TWin > thisClass; typedef CBasePageImpl< T, TWin > baseClass; public: // // Construction // // Standard constructor CBasePropertyPageImpl( IN OUT LPCTSTR lpszTitle = NULL ) : baseClass( lpszTitle ) { // Set the pointer in the base window class to our prop page header. m_ppsp = &m_psp; } //*** CBasePropertyPageImpl( lpszTitle ) // Constructor taking a resource ID for the title CBasePropertyPageImpl( IN UINT nIDTitle ) : baseClass( nIDTitle ) { // Set the pointer in the base window class to our prop page header. m_ppsp = &m_psp; } //*** CBasePropertyPageImpl( nIDCaption ) // Initialize the page virtual BOOL BInit( CBaseSheetWindow * psht ) { if ( ! baseClass::BInit( psht ) ) return FALSE; return TRUE; } //*** BInit() public: // // Message handler functions. // // Handler for PSN_KILLACTIVE BOOL OnKillActive( void ) { // Call the TWin method return TWin::OnKillActive(); } //*** OnKillActive() // Implementation protected: public: }; //*** class CBasePropertyPageImpl ///////////////////////////////////////////////////////////////////////////// //++ // // class CStaticPropertyPageImpl // // Description: // Base property sheet page implementation for pages added to a standard // property sheet before the call to PropertySheet(). This page cannot // be removed from the sheet. // // Inheritance: // CStaticPropertyPageImpl< T > // CBasePropertyPageImpl< T, CStaticPropertyPageWindow > // CBasePageImpl< T, CStaticPropertyPageWindow > // CPropertyPageImpl< T, CStaticPropertyPageWindow > // CStaticPropertyPageWindow // CBasePropertyPageWindow // CBasePageWindow // CPropertyPageWindow // //-- ///////////////////////////////////////////////////////////////////////////// template < class T > class CStaticPropertyPageImpl : public CBasePropertyPageImpl< T, CStaticPropertyPageWindow > { typedef CStaticPropertyPageImpl< T > thisClass; typedef CBasePropertyPageImpl< T, CStaticPropertyPageWindow > baseClass; public: // // Construction. // // Standard constructor CStaticPropertyPageImpl( IN OUT LPCTSTR lpszTitle = NULL ) : baseClass( lpszTitle ) { } //*** CStaticPropertyPageImpl( lpszTitle ) // Constructor taking a resource ID for the title CStaticPropertyPageImpl( IN UINT nIDTitle ) : baseClass( nIDTitle ) { } //*** CStaticPropertyPageImpl( nIDTitle ) }; //*** class CStaticPropertyPageImpl ///////////////////////////////////////////////////////////////////////////// //++ // // class CDynamicPropertyPageImpl // // Description: // Base property sheet page implementation for pages added to a standard // property sheet after the call to PropertySheet() identified as an // Extension to the list of standard pages (whether static or dynamic). // This page may be removed from the sheet. // // Inheritance: // CDynamicPropertyPageImpl< T > // CBasePropertyPageImpl< T, CDynamicPropertyPageWindow > // CBasePageImpl< T, CDynamicPropertyPageWindow > // CPropertyPageImpl< T, CDynamicPropertyPageWindow > // CDynamicPropertyPageWindow // CBasePropertyPageWindow // CBasePageWindow // CPropertyPageWindow // //-- ///////////////////////////////////////////////////////////////////////////// template < class T > class CDynamicPropertyPageImpl : public CBasePropertyPageImpl< T, CDynamicPropertyPageWindow > { typedef CDynamicPropertyPageImpl< T > thisClass; typedef CBasePropertyPageImpl< T, CDynamicPropertyPageWindow > baseClass; public: // // Construction. // // Standard constructor CDynamicPropertyPageImpl( IN OUT LPCTSTR lpszTitle = NULL ) : baseClass( lpszTitle ) { } //*** CDynamicPropertyPageImpl( lpszTitle ) // Constructor taking a resource ID for the title CDynamicPropertyPageImpl( IN UINT nIDTitle ) : baseClass( nIDTitle ) { } //*** CDynamicPropertyPageImpl( nIDTitle ) // Create the page DWORD ScCreatePage( void ) { ATLASSERT( m_hpage == NULL ); m_hpage = CreatePropertySheetPage( &m_psp ); if ( m_hpage == NULL ) { return GetLastError(); } // if: error creating the page return ERROR_SUCCESS; } //*** ScCreatePage() }; //*** class CDynamicPropertyPageImpl ///////////////////////////////////////////////////////////////////////////// //++ // // class CExtensionPropertyPageImpl // // Description: // Base property sheet page implementation for pages added to a standard // property sheet after the call to PropertySheet() identified as an // extension to the list of standard pages (whether static or dynamic). // This page may be removed from the sheet. // // Inheritance: // CExtensionPropertyPageImpl< T > // CBasePropertyPageImpl< T, CExtensionPropertyPageWindow > // CBasePageImpl< T, CExtensionPropertyPageWindow > // CPropertyPageImpl< T, CExtensionPropertyPageWindow > // CExtensionPropertyPageWindow // CDynamicPropertyPageWindow // CBasePropertyPageWindow // CBasePageWindow // CPropertyPageWindow // //-- ///////////////////////////////////////////////////////////////////////////// template < class T > class CExtensionPropertyPageImpl : public CBasePropertyPageImpl< T, CExtensionPropertyPageWindow > { typedef CExtensionPropertyPageImpl< T > thisClass; typedef CBasePropertyPageImpl< T, CExtensionPropertyPageWindow > baseClass; public: // // Construction. // // Standard constructor CExtensionPropertyPageImpl( IN OUT LPCTSTR lpszTitle = NULL ) : baseClass( lpszTitle ) { } //*** CExtensionPropertyPageImpl( lpszTitle ) // Constructor taking a resource ID for the title CExtensionPropertyPageImpl( IN UINT nIDTitle ) : baseClass( nIDTitle ) { } //*** CExtensionPropertyPageImpl( nIDTitle ) }; //*** class CExtensionPropertyPageImpl ///////////////////////////////////////////////////////////////////////////// #endif // __ATLBASEPROPPAGE_H_