Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

325 lines
7.7 KiB

/////////////////////////////////////////////////////////////////////////////
//
// Copyright (c) 1996-1999 Microsoft Corporation
//
// Module Name:
// AtlBaseSheet.h
//
// Implementation File:
// AtlBaseSheet.cpp
//
// Description:
// Definition of the CBaseSheetWindow and CBaseSheetImpl classes.
//
// Author:
// David Potter (davidp) December 1, 1997
//
// Revision History:
//
// Notes:
//
/////////////////////////////////////////////////////////////////////////////
#ifndef __ATLBASESHEET_H_
#define __ATLBASESHEET_H_
/////////////////////////////////////////////////////////////////////////////
// Forward Class Declarations
/////////////////////////////////////////////////////////////////////////////
class CBaseSheetWindow;
template < class T, class TBase > class CBaseSheetImpl;
/////////////////////////////////////////////////////////////////////////////
// External Class Declarations
/////////////////////////////////////////////////////////////////////////////
class CCluAdmExtensions;
class CBasePageWindow;
/////////////////////////////////////////////////////////////////////////////
// Include Files
/////////////////////////////////////////////////////////////////////////////
#ifndef __ATLDBGWIN_H_
#include "AtlDbgWin.h" // for DBG_xxx routines
#endif
/////////////////////////////////////////////////////////////////////////////
// Type Definitions
/////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////
//++
//
// class CBaseSheetWindow
//
// Description:
// Base property sheet window for all kinds of property sheets.
//
// Inheritance:
// CBaseSheetWindow
// CPropertySheetWindow
//
//--
/////////////////////////////////////////////////////////////////////////////
class CBaseSheetWindow : public CPropertySheetWindow
{
typedef CPropertySheetWindow baseClass;
public:
//
// Construction.
//
// Standard constructor
CBaseSheetWindow( HWND hWnd = NULL )
: baseClass( hWnd )
, m_bReadOnly( FALSE )
, m_bNeedToLoadExtensions( TRUE )
, m_ppsh( NULL )
, m_pext( NULL )
{
} //*** CBaseSheetWindow()
// Destructor
virtual ~CBaseSheetWindow( void );
//
// This must be virtual so that a pointer to an object
// of type CBaseSheetWindow can be held and then later
// deleted. That way the derived class's destructor will
// be called.
//
// Initialize the sheet
BOOL BInit( void )
{
return TRUE;
}
public:
//
// CPropertySheetWindow methods.
//
// Add a page (allows other AddPage method to be virtual)
void AddPage( HPROPSHEETPAGE hPage )
{
baseClass::AddPage( hPage );
} //*** AddPage( hPage )
// Add a page (virtual so this class can call derived class method)
virtual BOOL AddPage( LPCPROPSHEETPAGE pPage )
{
return baseClass::AddPage( pPage );
} //*** AddPage( pPage )
// Add a page to the propsheetheader page list
virtual BAddPageToSheetHeader( IN HPROPSHEETPAGE hPage ) = 0;
public:
//
// CBaseSheetWindow public methods.
//
// Create a font for use on the sheet
static BOOL BCreateFont(
OUT CFont & rfont,
IN LONG nPoints,
IN LPCTSTR pszFaceName = _T("MS Shell Dlg"),
IN BOOL bBold = FALSE,
IN BOOL bItalic = FALSE,
IN BOOL bUnderline = FALSE
);
// Create a font for use on the sheet
static BOOL BCreateFont(
OUT CFont & rfont,
IN UINT idsPoints,
IN UINT idsFaceName,
IN BOOL bBold = FALSE,
IN BOOL bItalic = FALSE,
IN BOOL bUnderline = FALSE
);
public:
//
// Abstract override methods.
//
// Add extension pages to the sheet
virtual void AddExtensionPages( IN HFONT hfont, IN HICON hicon ) = 0;
// Add a page (called by extension)
virtual HRESULT HrAddExtensionPage( IN CBasePageWindow * ppage ) = 0;
public:
//
// Message handler functions.
//
// Handler for PSCB_INITIALIZED
void OnSheetInitialized( void )
{
} //*** OnSheetInitialized()
// Implementation
protected:
PROPSHEETHEADER * m_ppsh;
BOOL m_bReadOnly; // Set if the sheet cannot be changed.
BOOL m_bNeedToLoadExtensions;
CCluAdmExtensions * m_pext;
public:
BOOL BNeedToLoadExtensions( void ) const { return m_bNeedToLoadExtensions; }
BOOL BReadOnly( void ) const { return m_bReadOnly; }
void SetReadOnly( IN BOOL bReadOnly = TRUE ) { m_bReadOnly = bReadOnly; }
// Return a pointer to the property sheet header
PROPSHEETHEADER * Ppsh( void ) const
{
ATLASSERT( m_ppsh != NULL );
return m_ppsh;
} //*** Ppsh()
CCluAdmExtensions * Pext( void ) const { return m_pext; }
}; //*** class CBaseSheetWindow
/////////////////////////////////////////////////////////////////////////////
//++
//
// class CBaseSheetImpl
//
// Description:
// Base property sheet implementation for all kinds of property sheets.
//
// Inheritance
// CBaseSheetImpl< T, TBase >
// CPropertySheetImpl< T, TBase >
// <TBase>
// ...
// CBaseSheetWindow
// CPropertySheetWindow
//
//--
/////////////////////////////////////////////////////////////////////////////
template < class T, class TBase = CBaseSheetWindow >
class CBaseSheetImpl : public CPropertySheetImpl< T, TBase >
{
typedef CBaseSheetImpl< T, TBase > thisClass;
typedef CPropertySheetImpl< T, TBase > baseClass;
public:
//
// Construction.
//
// Standard constructor
CBaseSheetImpl(
IN LPCTSTR lpszTitle = NULL,
IN UINT uStartPage = 0,
IN HWND hWndParent = NULL
)
: baseClass( lpszTitle, uStartPage, hWndParent )
{
} //*** CBaseSheetImpl()
static int CALLBACK PropSheetCallback( HWND hWnd, UINT uMsg, LPARAM lParam )
{
//
// If we are initialized, let the sheet do further initialization.
// We have to subclass here because otherwize we won't have a
// pointer to the class instance.
//
if ( uMsg == PSCB_INITIALIZED )
{
ATLASSERT( hWnd != NULL );
T * pT = static_cast< T * >( _Module.ExtractCreateWndData() );
ATLASSERT( pT != NULL );
pT->SubclassWindow(hWnd);
pT->OnSheetInitialized();
} // if: sheet has been initialized
return 0;
} //*** PropSheetCallback()
public:
//
// CPropertySheetImpl methods.
//
// Add a page to the propsheetheader page list
virtual BAddPageToSheetHeader( IN HPROPSHEETPAGE hPage )
{
return AddPage( hPage );
} //*** BAddPageToHeader()
public:
//
// Message map.
//
BEGIN_MSG_MAP( thisClass )
#if DBG
#ifdef _DBG_MSG
MESSAGE_RANGE_HANDLER( 0, 0xffffffff, OnMsg )
#endif // _DBG_MSG
#ifdef _DBG_MSG_NOTIFY
MESSAGE_HANDLER( WM_NOTIFY, OnNotify )
#endif // _DBG_MSG_NOTIFY
#ifdef _DBG_MSG_COMMAND
MESSAGE_HANDLER( WM_COMMAND, OnCommand )
#endif // _DBG_MSG_COMMAND
#endif // DBG
// CHAIN_MSG_MAP( baseClass ) // doesn't work because base class doesn't have a message map
END_MSG_MAP()
public:
//
// Message handler functions.
//
#if DBG && defined( _DBG_MSG )
// Handler for any message
LRESULT OnMsg( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled )
{
return DBG_OnMsg( uMsg, wParam, lParam, bHandled, T::s_pszClassName );
} //*** OnMsg()
#endif // DBG && defined( _DBG_MSG )
#if DBG && defined( _DBG_MSG_NOTIFY )
// Handler for the WM_NOTIFY message
LRESULT OnNotify( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled )
{
return DBG_OnNotify( uMsg, wParam, lParam, bHandled, T::s_pszClassName, NULL );
} //*** OnNotify()
#endif // DBG && defined( _DBG_MSG_NOTIFY )
#if DBG && defined( _DBG_MSG_COMMAND )
// Handler for the WM_COMMAND message
LRESULT OnCommand( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL & bHandled )
{
return DBG_OnCommand( uMsg, wParam, lParam, bHandled, T::s_pszClassName, NULL );
} //*** OnCommand()
#endif // DBG && defined( _DBG_MSG_COMMAND )
// Implementation
protected:
public:
}; //*** class CBaseSheetImpl
/////////////////////////////////////////////////////////////////////////////
#endif // __ATLBASESHEET_H_