535 lines
13 KiB
C++
535 lines
13 KiB
C++
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// 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 >
|
|
// <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_
|