954 lines
22 KiB
C
954 lines
22 KiB
C
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//
|
||
|
// Copyright (c) 1996-1999 Microsoft Corporation
|
||
|
//
|
||
|
// Module Name:
|
||
|
// AtlBaseWizPage.h
|
||
|
//
|
||
|
// Implementation File:
|
||
|
// AtlBaseWizPage.cpp
|
||
|
//
|
||
|
// Description:
|
||
|
// Definition of the CWizardPageWindow and CWizardPageImpl classes.
|
||
|
//
|
||
|
// Author:
|
||
|
// David Potter (davidp) December 2, 1997
|
||
|
//
|
||
|
// Revision History:
|
||
|
//
|
||
|
// Notes:
|
||
|
//
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#ifndef __ATLBASEWIZPAGE_H_
|
||
|
#define __ATLBASEWIZPAGE_H_
|
||
|
|
||
|
// Required because of class names longer than 16 characters in lists.
|
||
|
#pragma warning( disable : 4786 ) // identifier was truncated to '255' characters in the browser information
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// Forward Class Declarations
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class CStaticWizardPageList;
|
||
|
class CDynamicWizardPageList;
|
||
|
class CExtensionWizardPageList;
|
||
|
class CExtensionWizard97PageList;
|
||
|
class CWizardPageList;
|
||
|
class CWizardPageWindow;
|
||
|
class CStaticWizardPageWindow;
|
||
|
class CDynamicWizardPageWindow;
|
||
|
class CExtensionWizardPageWindow;
|
||
|
class CExtensionWizard97PageWindow;
|
||
|
template < class T, class TWin > class CWizardPageImpl;
|
||
|
template < class T > class CStaticWizardPageImpl;
|
||
|
template < class T > class CDynamicWizardPageImpl;
|
||
|
template < class T > class CExtensionWizardPageImpl;
|
||
|
template < class T > class CExtensionWizard97PageImpl;
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// External Class Declarations
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class CWizardWindow;
|
||
|
class CCluAdmExDll;
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// Include Files
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#ifndef __ATLBASEPAGE_H_
|
||
|
#include "AtlBasePage.h" // for CBasePageWindow, CBasePageImpl
|
||
|
#endif
|
||
|
|
||
|
#ifndef __ATLDBGWIN_H_
|
||
|
#include "AtlDbgWin.h" // for debugging definitions
|
||
|
#endif
|
||
|
|
||
|
#ifndef __ATLBASEWIZ_H_
|
||
|
#include "AtlBaseWiz.h" // for CWizardWindow (Pwiz() usage)
|
||
|
#endif
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
// Type Definitions
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class CStaticWizardPageList : public std::list< CStaticWizardPageWindow * >
|
||
|
{
|
||
|
}; //*** class CStaticWizardPageList
|
||
|
|
||
|
class CDynamicWizardPageList : public std::list< CDynamicWizardPageWindow * >
|
||
|
{
|
||
|
}; //*** class CDynamicWizardPageList
|
||
|
|
||
|
class CExtensionWizardPageList : public std::list< CExtensionWizardPageWindow * >
|
||
|
{
|
||
|
}; //*** class CExtensionWizardPageList
|
||
|
|
||
|
class CExtensionWizard97PageList : public std::list< CExtensionWizard97PageWindow * >
|
||
|
{
|
||
|
}; //*** class CExtensionWizard97PageList
|
||
|
|
||
|
#define WIZARDPAGE_HEADERTITLEID( ids ) \
|
||
|
static UINT GetWizardPageHeaderTitleId(void) \
|
||
|
{ \
|
||
|
return ids; \
|
||
|
}
|
||
|
|
||
|
#define WIZARDPAGE_HEADERSUBTITLEID( ids ) \
|
||
|
static UINT GetWizardPageHeaderSubTitleId(void) \
|
||
|
{ \
|
||
|
return ids; \
|
||
|
}
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CWizardPageList
|
||
|
//
|
||
|
// Description:
|
||
|
// List of wizard pages.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// CWizardPageList
|
||
|
// std::list< CWizardPageWindow * >
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class CWizardPageList : public std::list< CWizardPageWindow * >
|
||
|
{
|
||
|
typedef std::list< CWizardPageWindow * > baseClass;
|
||
|
|
||
|
public:
|
||
|
// Find page by resource ID
|
||
|
CWizardPageWindow * PwpageFromID( IN LPCTSTR psz );
|
||
|
|
||
|
// Find next page by resource ID
|
||
|
CWizardPageWindow * PwpageNextFromID( IN LPCTSTR psz );
|
||
|
|
||
|
}; //*** class CWizardPageList
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CWizardPageWindow
|
||
|
//
|
||
|
// Description:
|
||
|
// Base wizard property sheet page window.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// CWizardPageWindow
|
||
|
// CBasePageWindow
|
||
|
// CPropertyPageWindow
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class CWizardPageWindow : public CBasePageWindow
|
||
|
{
|
||
|
typedef CBasePageWindow baseClass;
|
||
|
|
||
|
friend CWizardWindow;
|
||
|
friend CCluAdmExDll;
|
||
|
|
||
|
public:
|
||
|
//
|
||
|
// Construction
|
||
|
//
|
||
|
|
||
|
// Standard constructor
|
||
|
CWizardPageWindow( HWND hWnd = NULL )
|
||
|
: baseClass( hWnd )
|
||
|
, m_fWizardButtons( 0 )
|
||
|
, m_bBackPressed( FALSE )
|
||
|
, m_bIsPageEnabled( FALSE )
|
||
|
, m_bIsNextPageSet( FALSE )
|
||
|
{
|
||
|
} //*** CWizardPageWindow()
|
||
|
|
||
|
// Destructor
|
||
|
virtual ~CWizardPageWindow( void )
|
||
|
{
|
||
|
} //*** ~CWizardPageWindow()
|
||
|
|
||
|
public:
|
||
|
//
|
||
|
// CWizardPageWindow public methods.
|
||
|
//
|
||
|
|
||
|
// Enable or disable the Next button
|
||
|
void EnableNext( IN BOOL bEnable = TRUE )
|
||
|
{
|
||
|
ATLASSERT( Pwiz() != NULL );
|
||
|
|
||
|
//
|
||
|
// Ask the wizard to enable or disable the Next button.
|
||
|
//
|
||
|
Pwiz()->EnableNext( bEnable, FWizardButtons() );
|
||
|
|
||
|
} //*** EnableNext()
|
||
|
|
||
|
// Set the next page to be enabled
|
||
|
void SetNextPage( IN LPCTSTR pszNextPage )
|
||
|
{
|
||
|
Pwiz()->SetNextPage( this, pszNextPage );
|
||
|
m_bIsNextPageSet = TRUE;
|
||
|
|
||
|
} //*** SetNextPage()
|
||
|
|
||
|
// Set the next page to be enabled from a dialog ID
|
||
|
void SetNextPage( IN UINT idNextPage )
|
||
|
{
|
||
|
Pwiz()->SetNextPage( this, idNextPage );
|
||
|
m_bIsNextPageSet = TRUE;
|
||
|
|
||
|
} //*** SetNextPage()
|
||
|
|
||
|
public:
|
||
|
//
|
||
|
// Message handler functions.
|
||
|
//
|
||
|
|
||
|
// Handler for PSN_SETACTIVE
|
||
|
BOOL OnSetActive( void )
|
||
|
{
|
||
|
if ( ! m_bIsPageEnabled )
|
||
|
{
|
||
|
return FALSE;
|
||
|
} // if: page is not enabled to be displayed
|
||
|
|
||
|
SetWizardButtons();
|
||
|
m_bBackPressed = FALSE;
|
||
|
|
||
|
return baseClass::OnSetActive();
|
||
|
|
||
|
} //*** OnSetActive()
|
||
|
|
||
|
// Handler for PSN_WIZBACK
|
||
|
int OnWizardBack( void )
|
||
|
{
|
||
|
m_bBackPressed = TRUE;
|
||
|
int nResult = baseClass::OnWizardBack();
|
||
|
if ( ! UpdateData( TRUE /*bSaveAndValidate*/ ) )
|
||
|
{
|
||
|
nResult = -1;
|
||
|
} // if: error updating data
|
||
|
if ( nResult == -1 ) // if not successful
|
||
|
{
|
||
|
m_bBackPressed = FALSE;
|
||
|
} // if: failure occurred
|
||
|
else if ( nResult == 0 ) // defaulting to go to next page
|
||
|
{
|
||
|
} // else if: no next page specified
|
||
|
|
||
|
return nResult;
|
||
|
|
||
|
} //*** OnWizardBack()
|
||
|
|
||
|
// Handler for PSN_WIZNEXT
|
||
|
int OnWizardNext( void )
|
||
|
{
|
||
|
// Update the data in the class from the page.
|
||
|
if ( ! UpdateData( TRUE /*bSaveAndValidate*/ ) )
|
||
|
{
|
||
|
return -1;
|
||
|
} // if: error updating data
|
||
|
|
||
|
// Save the data in the sheet.
|
||
|
if ( ! BApplyChanges() )
|
||
|
{
|
||
|
return -1;
|
||
|
} // if: error applying changes
|
||
|
|
||
|
int nResult = baseClass::OnWizardNext();
|
||
|
|
||
|
return nResult;
|
||
|
|
||
|
} //*** OnWizardNext()
|
||
|
|
||
|
// Handler for PSN_WIZFINISH
|
||
|
BOOL OnWizardFinish( void )
|
||
|
{
|
||
|
if ( BIsPageEnabled() )
|
||
|
{
|
||
|
// Update the data in the class from the page.
|
||
|
if ( ! UpdateData( TRUE /*bSaveAndValidate*/ ) )
|
||
|
{
|
||
|
return FALSE;
|
||
|
} // if: error updating data
|
||
|
|
||
|
// Save the data in the sheet.
|
||
|
if ( ! BApplyChanges() )
|
||
|
{
|
||
|
return FALSE;
|
||
|
} // if: error applying changes
|
||
|
} // if: page is enabled
|
||
|
|
||
|
return baseClass::OnWizardFinish();
|
||
|
|
||
|
} //*** OnWizardFinish()
|
||
|
|
||
|
// Handler for PSN_RESET
|
||
|
void OnReset( void )
|
||
|
{
|
||
|
Pwiz()->OnReset();
|
||
|
baseClass::OnReset();
|
||
|
|
||
|
} //*** OnReset()
|
||
|
|
||
|
// Implementation
|
||
|
protected:
|
||
|
DWORD m_fWizardButtons;
|
||
|
BOOL m_bBackPressed;
|
||
|
BOOL m_bIsPageEnabled;
|
||
|
BOOL m_bIsNextPageSet;
|
||
|
CString m_strHeaderTitle;
|
||
|
CString m_strHeaderSubTitle;
|
||
|
|
||
|
DWORD FWizardButtons( void ) const { return m_fWizardButtons; }
|
||
|
BOOL BBackPressed( void ) const { return m_bBackPressed; }
|
||
|
BOOL BIsPageEnabled( void ) const { return m_bIsPageEnabled; }
|
||
|
BOOL BIsNextPageSet( void ) const { return m_bIsNextPageSet; }
|
||
|
const CString & StrHeaderTitle( void ) const { return m_strHeaderTitle; }
|
||
|
const CString & StrHeaderSubTitle( void ) const { return m_strHeaderSubTitle; }
|
||
|
|
||
|
CWizardWindow * Pwiz( void ) const { return (CWizardWindow *) Psht(); }
|
||
|
|
||
|
// Set default wizard buttons to be displayed with page
|
||
|
void SetDefaultWizardButtons( IN DWORD fWizardButtons )
|
||
|
{
|
||
|
ATLASSERT( fWizardButtons != 0 );
|
||
|
m_fWizardButtons = fWizardButtons;
|
||
|
|
||
|
} //*** SetDefaultWizardButtons()
|
||
|
|
||
|
public:
|
||
|
// Set wizard buttons on the wizard
|
||
|
void SetWizardButtons( void )
|
||
|
{
|
||
|
ATLASSERT( m_fWizardButtons != 0 );
|
||
|
Pwiz()->SetWizardButtons( m_fWizardButtons );
|
||
|
|
||
|
} //*** SetWizardButtons()
|
||
|
|
||
|
// Enable or disable the page
|
||
|
void EnablePage( IN BOOL bEnable = TRUE )
|
||
|
{
|
||
|
m_bIsPageEnabled = bEnable;
|
||
|
|
||
|
} //*** EnablePage()
|
||
|
|
||
|
}; //*** class CWizardPageWindow
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CStaticWizardPageWindow
|
||
|
//
|
||
|
// Description:
|
||
|
// Base wizard property sheet page window for pages added to a wizard
|
||
|
// property sheet before the call to PropertySheet(). This page cannot
|
||
|
// be removed from the sheet.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// CStaticWizardPageWindow
|
||
|
// CWizardPageWindow
|
||
|
// CBasePageWindow
|
||
|
// CPropertyPageWindow
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class CStaticWizardPageWindow : public CWizardPageWindow
|
||
|
{
|
||
|
typedef CWizardPageWindow baseClass;
|
||
|
|
||
|
public:
|
||
|
//
|
||
|
// Construction
|
||
|
//
|
||
|
|
||
|
// Standard constructor
|
||
|
CStaticWizardPageWindow( HWND hWnd = NULL )
|
||
|
: baseClass( hWnd )
|
||
|
{
|
||
|
} //*** CStaticWizardPageWindow()
|
||
|
|
||
|
}; //*** class CStaticWizardPageWindow
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CDynamicWizardPageWindow
|
||
|
//
|
||
|
// Description:
|
||
|
// Base wizard property sheet page window for pages added to a wizard
|
||
|
// property sheet after the call to PropertySheet(). This page may be
|
||
|
// removed from the sheet.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// CDynamicWizardPageWindow
|
||
|
// CWizardPageWindow
|
||
|
// CBasePageWindow
|
||
|
// CPropertyPageWindow
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class CDynamicWizardPageWindow : public CWizardPageWindow
|
||
|
{
|
||
|
typedef CWizardPageWindow baseClass;
|
||
|
|
||
|
public:
|
||
|
//
|
||
|
// Construction
|
||
|
//
|
||
|
|
||
|
// Standard constructor
|
||
|
CDynamicWizardPageWindow( HWND hWnd = NULL )
|
||
|
: baseClass( hWnd )
|
||
|
, m_hpage( NULL )
|
||
|
, m_bPageAddedToSheet( FALSE )
|
||
|
{
|
||
|
} //*** CDynamicWizardPageWindow()
|
||
|
|
||
|
// Destructor
|
||
|
~CDynamicWizardPageWindow( 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 and not added to the sheet
|
||
|
|
||
|
} //*** ~CDynamicWizardPageWindow()
|
||
|
|
||
|
// 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; }
|
||
|
|
||
|
// Returns whether page has been added to the sheet or not
|
||
|
BOOL BPageAddedToSheet( void ) const { return m_bPageAddedToSheet; }
|
||
|
|
||
|
// 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 CDynamicWizardPageWindow
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CExtensionWizardPageWindow
|
||
|
//
|
||
|
// Description:
|
||
|
// Base wizard property sheet page window for pages added to a wizard
|
||
|
// property sheet after the call to PropertySheet() identified as a
|
||
|
// non-Wizard97 extension to the list of standard pages. This page may
|
||
|
// be removed from the sheet.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// CExtensionWizardPageWindow
|
||
|
// CDynamicWizardPageWindow
|
||
|
// CWizardPageWindow
|
||
|
// CBasePageWindow
|
||
|
// CPropertyPageWindow
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class CExtensionWizardPageWindow : public CDynamicWizardPageWindow
|
||
|
{
|
||
|
typedef CDynamicWizardPageWindow baseClass;
|
||
|
|
||
|
public:
|
||
|
//
|
||
|
// Construction
|
||
|
//
|
||
|
|
||
|
// Standard constructor
|
||
|
CExtensionWizardPageWindow( HWND hWnd = NULL )
|
||
|
: baseClass( hWnd )
|
||
|
{
|
||
|
} //*** CExtensionWizardPageWindow()
|
||
|
|
||
|
}; //*** class CExtensionWizardPageWindow
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CExtensionWizard97PageWindow
|
||
|
//
|
||
|
// Description:
|
||
|
// Base wizard property sheet page window for pages added to a wizard
|
||
|
// property sheet after the call to PropertySheet() identified as a
|
||
|
// Wizard97 extension to the list of standard pages. This page may be
|
||
|
// removed from the sheet.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// CExtensionWizard97PageWindow
|
||
|
// CExtensionWizardPageWindow
|
||
|
// CDynamicWizardPageWindow
|
||
|
// CWizardPageWindow
|
||
|
// CBasePageWindow
|
||
|
// CPropertyPageWindow
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
class CExtensionWizard97PageWindow : public CExtensionWizardPageWindow
|
||
|
{
|
||
|
typedef CExtensionWizardPageWindow baseClass;
|
||
|
|
||
|
public:
|
||
|
//
|
||
|
// Construction
|
||
|
//
|
||
|
|
||
|
// Standard constructor
|
||
|
CExtensionWizard97PageWindow( HWND hWnd = NULL )
|
||
|
: baseClass( hWnd )
|
||
|
{
|
||
|
} //*** CExtensionWizard97PageWindow()
|
||
|
|
||
|
}; //*** class CExtensionWizard97PageWindow
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CWizardPageImpl
|
||
|
//
|
||
|
// Description:
|
||
|
// Base wizard property sheet page implementation.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// CWizardPageImpl< T, TWin >
|
||
|
// CBasePageImpl< T, TWin >
|
||
|
// CPropertyPageImpl< T, TWin >
|
||
|
// <TWin>
|
||
|
// ...
|
||
|
// CWizardPageWindow
|
||
|
// CBasePageWindow
|
||
|
// CPropertyPageWindow
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
template < class T, class TWin = CWizardPageWindow >
|
||
|
class CWizardPageImpl : public CBasePageImpl< T, TWin >
|
||
|
{
|
||
|
typedef CWizardPageImpl< T, TWin > thisClass;
|
||
|
typedef CBasePageImpl< T, TWin > baseClass;
|
||
|
|
||
|
public:
|
||
|
//
|
||
|
// Construction
|
||
|
//
|
||
|
|
||
|
// Standard constructor
|
||
|
CWizardPageImpl(
|
||
|
IN OUT LPCTSTR lpszTitle = NULL
|
||
|
)
|
||
|
: baseClass( lpszTitle )
|
||
|
{
|
||
|
// Set the pointer in the base window class to our prop page header.
|
||
|
m_ppsp = &m_psp;
|
||
|
|
||
|
} //*** CWizardPageImpl( lpszTitle )
|
||
|
|
||
|
// Constructor taking a resource ID for the title
|
||
|
CWizardPageImpl(
|
||
|
IN UINT nIDTitle
|
||
|
)
|
||
|
: baseClass( nIDTitle )
|
||
|
{
|
||
|
// Set the pointer in the base window class to our prop page header.
|
||
|
m_ppsp = &m_psp;
|
||
|
|
||
|
} //*** CWizardPageImpl( nIDTitle )
|
||
|
|
||
|
// Initialize the page
|
||
|
virtual BOOL BInit( IN CBaseSheetWindow * psht )
|
||
|
{
|
||
|
if ( ! baseClass::BInit( psht ) )
|
||
|
{
|
||
|
return FALSE;
|
||
|
} // if: base class failed
|
||
|
if ( (Pwiz()->Ppsh()->dwFlags & PSH_WIZARD97)
|
||
|
&& (Pwiz()->Ppsh()->dwFlags & PSH_HEADER) )
|
||
|
{
|
||
|
//
|
||
|
// Get the header title.
|
||
|
//
|
||
|
UINT idsTitle = T::GetWizardPageHeaderTitleId();
|
||
|
if ( idsTitle != 0 )
|
||
|
{
|
||
|
m_strHeaderTitle.LoadString( idsTitle );
|
||
|
m_psp.pszHeaderTitle = m_strHeaderTitle;
|
||
|
m_psp.dwFlags |= PSP_USEHEADERTITLE;
|
||
|
m_psp.dwFlags &= ~PSP_HIDEHEADER;
|
||
|
|
||
|
//
|
||
|
// Get the header subtitle.
|
||
|
//
|
||
|
UINT idsSubTitle = T::GetWizardPageHeaderSubTitleId();
|
||
|
if ( idsSubTitle != 0 )
|
||
|
{
|
||
|
m_strHeaderSubTitle.LoadString( idsSubTitle );
|
||
|
m_psp.pszHeaderSubTitle = m_strHeaderSubTitle;
|
||
|
m_psp.dwFlags |= PSP_USEHEADERSUBTITLE;
|
||
|
} // if: subtitle specified
|
||
|
} // if: title specified
|
||
|
else
|
||
|
{
|
||
|
m_psp.dwFlags |= PSP_HIDEHEADER;
|
||
|
} // else: no title specified
|
||
|
} // if: Wizard97 with a header
|
||
|
|
||
|
return TRUE;
|
||
|
|
||
|
} //*** BInit()
|
||
|
|
||
|
public:
|
||
|
//
|
||
|
// CWizardPageImpl public methods.
|
||
|
//
|
||
|
|
||
|
// Get the next page we're going to
|
||
|
CWizardPageWindow * PwizpgNext( IN LPCTSTR psz = NULL )
|
||
|
{
|
||
|
ATLASSERT( psz != (LPCTSTR) -1 );
|
||
|
CWizardPageWindow * ppage = NULL;
|
||
|
if ( psz == NULL )
|
||
|
{
|
||
|
//
|
||
|
// There will not be a resource ID for extension pages, so check
|
||
|
// for that before calling PwpageNextFromID. This allows us to
|
||
|
// leave the assert in there for a non-NULL resource.
|
||
|
//
|
||
|
if ( T::IDD != 0 )
|
||
|
{
|
||
|
ppage = Pwiz()->PlwpPages()->PwpageNextFromID( MAKEINTRESOURCE( T::IDD ) );
|
||
|
} // if: there is a resource ID for this page
|
||
|
} // if: no next page specified
|
||
|
else
|
||
|
{
|
||
|
ppage = Pwiz()->PlwpPages()->PwpageFromID( psz );
|
||
|
} // else: next page specified
|
||
|
return ppage;
|
||
|
|
||
|
} //*** PwizpgNext()
|
||
|
|
||
|
// Enable or disable the next page
|
||
|
void EnableNextPage( IN BOOL bEnable = TRUE )
|
||
|
{
|
||
|
CWizardPageWindow * pwp = PwizpgNext();
|
||
|
if ( pwp != NULL )
|
||
|
{
|
||
|
pwp->EnablePage( bEnable );
|
||
|
} // if: next page found
|
||
|
|
||
|
} //*** EnableNextPage()
|
||
|
|
||
|
public:
|
||
|
//
|
||
|
// Message handler functions.
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Message handler override functions.
|
||
|
//
|
||
|
|
||
|
// Handler for PSN_WIZBACK
|
||
|
int OnWizardBack( void )
|
||
|
{
|
||
|
//
|
||
|
// Make sure back button is marked as last button pressed.
|
||
|
//
|
||
|
Pwiz()->SetLastWizardButton( ID_WIZBACK );
|
||
|
|
||
|
return baseClass::OnWizardBack();
|
||
|
|
||
|
} //*** OnWizardBack()
|
||
|
|
||
|
// Handler for PSN_WIZNEXT
|
||
|
int OnWizardNext( void )
|
||
|
{
|
||
|
//
|
||
|
// Make sure next button is marked as last button pressed.
|
||
|
//
|
||
|
Pwiz()->SetLastWizardButton( ID_WIZNEXT );
|
||
|
|
||
|
int nResult = baseClass::OnWizardNext();
|
||
|
if ( nResult != -1 )
|
||
|
{
|
||
|
if ( ! BIsNextPageSet() )
|
||
|
{
|
||
|
EnableNextPage();
|
||
|
} // if: next page not set yet
|
||
|
m_bIsNextPageSet = FALSE;
|
||
|
} // if: changing pages
|
||
|
|
||
|
return nResult;
|
||
|
|
||
|
} //*** OnWizardNext()
|
||
|
|
||
|
// Implementation
|
||
|
protected:
|
||
|
|
||
|
public:
|
||
|
|
||
|
}; //*** class CWizardPageImpl
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CStaticWizardPageImpl
|
||
|
//
|
||
|
// Description:
|
||
|
// Base wizard property sheet page implementation for pages added to a
|
||
|
// wizard property sheet before the call to PropertySheet(). This page
|
||
|
// cannot be removed from the sheet.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// CStaticWizardPageImpl< T >
|
||
|
// CWizardPageImpl< T, CStaticWizardPageWindow >
|
||
|
// CBasePageImpl< T, CStaticWizardPageWindow >
|
||
|
// CPropertyPageImpl< T, CStaticWizardPageWindow >
|
||
|
// CStaticWizardPageWindow
|
||
|
// CWizardPageWindow
|
||
|
// CBasePageWindow
|
||
|
// CPropertyPageWindow
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
template < class T >
|
||
|
class CStaticWizardPageImpl : public CWizardPageImpl< T, CStaticWizardPageWindow >
|
||
|
{
|
||
|
typedef CStaticWizardPageImpl< T > thisClass;
|
||
|
typedef CWizardPageImpl< T, CStaticWizardPageWindow > baseClass;
|
||
|
|
||
|
public:
|
||
|
//
|
||
|
// Construction.
|
||
|
//
|
||
|
|
||
|
// Standard constructor
|
||
|
CStaticWizardPageImpl(
|
||
|
IN OUT LPCTSTR lpszTitle = NULL
|
||
|
)
|
||
|
: baseClass( lpszTitle )
|
||
|
{
|
||
|
} //*** CStaticWizardPageImpl( lpszTitle )
|
||
|
|
||
|
// Constructor taking a resource ID for the title
|
||
|
CStaticWizardPageImpl(
|
||
|
IN UINT nIDTitle
|
||
|
)
|
||
|
: baseClass( nIDTitle )
|
||
|
{
|
||
|
} //*** CStaticWizardPageImpl( nIDTitle )
|
||
|
|
||
|
}; //*** class CStaticWizardPageImpl
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CDynamicWizardPageImpl
|
||
|
//
|
||
|
// Description:
|
||
|
// Base wizard property sheet page implementation for pages added to a
|
||
|
// wizard property sheet after the call to PropertySheet(). This page
|
||
|
// may be removed from the sheet.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// CDynamicWizardPageImpl< T >
|
||
|
// CWizardPageImpl< T, CDynamicWizardPageWindow >
|
||
|
// CBasePageImpl< T, CDynamicWizardPageWindow >
|
||
|
// CPropertyPageImpl< T, CDynamicWizardPageWindow >
|
||
|
// CDynamicWizardPageWindow
|
||
|
// CWizardPageWindow
|
||
|
// CBasePageWindow
|
||
|
// CPropertyPageWindow
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
template < class T >
|
||
|
class CDynamicWizardPageImpl : public CWizardPageImpl< T, CDynamicWizardPageWindow >
|
||
|
{
|
||
|
typedef CDynamicWizardPageImpl< T > thisClass;
|
||
|
typedef CWizardPageImpl< T, CDynamicWizardPageWindow > baseClass;
|
||
|
|
||
|
public:
|
||
|
//
|
||
|
// Construction.
|
||
|
//
|
||
|
|
||
|
// Standard constructor
|
||
|
CDynamicWizardPageImpl(
|
||
|
IN OUT LPCTSTR lpszTitle = NULL
|
||
|
)
|
||
|
: baseClass( lpszTitle )
|
||
|
{
|
||
|
} //*** CDynamicWizardPageImpl( lpszTitle )
|
||
|
|
||
|
// Constructor taking a resource ID for the title
|
||
|
CDynamicWizardPageImpl(
|
||
|
IN UINT nIDTitle
|
||
|
)
|
||
|
: baseClass( nIDTitle )
|
||
|
{
|
||
|
} //*** CDynamicWizardPageImpl( 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 CDynamicWizardPageImpl
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CExtensionWizardPageImpl
|
||
|
//
|
||
|
// Description:
|
||
|
// Base wizard property sheet page implementation for pages added to a
|
||
|
// wizard property sheet after the call to PropertySheet() identified
|
||
|
// as a non-Wizard97 extension to the list of standard pages. This
|
||
|
// page may be removed from the sheet.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// CExtensionWizardPageImpl< T >
|
||
|
// CWizardPageImpl< T, CExtensionWizardPageWindow >
|
||
|
// CBasePageImpl< T, CExtensionWizardPageWindow >
|
||
|
// CPropertyPageImpl< T, CExtensionWizardPageWindow >
|
||
|
// CExtensionWizardPageWindow
|
||
|
// CDynamicWizardPageWindow
|
||
|
// CWizardPageWindow
|
||
|
// CBasePageWindow
|
||
|
// CPropertyPageWindow
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
template < class T >
|
||
|
class CExtensionWizardPageImpl : public CWizardPageImpl< T, CExtensionWizardPageWindow >
|
||
|
{
|
||
|
typedef CExtensionWizardPageImpl< T > thisClass;
|
||
|
typedef CWizardPageImpl< T, CExtensionWizardPageWindow > baseClass;
|
||
|
|
||
|
public:
|
||
|
//
|
||
|
// Construction.
|
||
|
//
|
||
|
|
||
|
// Standard constructor
|
||
|
CExtensionWizardPageImpl(
|
||
|
IN OUT LPCTSTR lpszTitle = NULL
|
||
|
)
|
||
|
: baseClass( lpszTitle )
|
||
|
{
|
||
|
} //*** CExtensionWizardPageImpl( lpszTitle )
|
||
|
|
||
|
// Constructor taking a resource ID for the title
|
||
|
CExtensionWizardPageImpl(
|
||
|
IN UINT nIDTitle
|
||
|
)
|
||
|
: baseClass( nIDTitle )
|
||
|
{
|
||
|
} //*** CExtensionWizardPageImpl( nIDTitle )
|
||
|
|
||
|
}; //*** class CExtensionWizardPageImpl
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
//++
|
||
|
//
|
||
|
// class CExtensionWizard97PageImpl
|
||
|
//
|
||
|
// Description:
|
||
|
// Base wizard property sheet page implementation for pages added to a
|
||
|
// wizard property sheet after the call to PropertySheet() identified
|
||
|
// as a Wizard97 extension to the list of standard pages. This page
|
||
|
// may be removed from the sheet.
|
||
|
//
|
||
|
// Inheritance:
|
||
|
// CExtensionWizard97PageImpl< T >
|
||
|
// CWizardPageImpl< T, CExtensionWizard97PageWindow >
|
||
|
// CBasePageImpl< T, CExtensionWizard97PageWindow >
|
||
|
// CPropertyPageImpl< T, CExtensionWizard97PageWindow >
|
||
|
// CExtensionWizard97PageWindow
|
||
|
// CExtensionWizardPageWindow
|
||
|
// CDynamicWizardPageWindow
|
||
|
// CWizardPageWindow
|
||
|
// CBasePageWindow
|
||
|
// CPropertyPageWindow
|
||
|
//
|
||
|
//--
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
template < class T >
|
||
|
class CExtensionWizard97PageImpl : public CWizardPageImpl< T, CExtensionWizard97PageWindow >
|
||
|
{
|
||
|
typedef CExtensionWizard97PageImpl< T > thisClass;
|
||
|
typedef CWizardPageImpl< T, CExtensionWizard97PageWindow > baseClass;
|
||
|
|
||
|
public:
|
||
|
//
|
||
|
// Construction.
|
||
|
//
|
||
|
|
||
|
// Standard constructor
|
||
|
CExtensionWizard97PageImpl(
|
||
|
IN OUT LPCTSTR lpszTitle = NULL
|
||
|
)
|
||
|
: baseClass( lpszTitle )
|
||
|
{
|
||
|
} //*** CExtensionWizard97PageImpl( lpszTitle )
|
||
|
|
||
|
// Constructor taking a resource ID for the title
|
||
|
CExtensionWizard97PageImpl(
|
||
|
IN UINT nIDTitle
|
||
|
)
|
||
|
: baseClass( nIDTitle )
|
||
|
{
|
||
|
} //*** CExtensionWizard97PageImpl( nIDTitle )
|
||
|
|
||
|
}; //*** class CExtensionWizard97PageImpl
|
||
|
|
||
|
/////////////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
#endif // __ATLBASEWIZPAGE_H_
|