|
|
////////////////////////////////////////////////////////////////////////////////////////////////////
// NOTE: THIS HAS NOT BEEN THROUGHLY TESTED. IT IS A SIMPLE CLASS, AND BUGS SHOULD
// PRESENT THEMSELVES THROUGH USAGE. THE BUGS SHOULD BE SIMPLE TO FIX.
////////////////////////////////////////////////////////////////////////////////////////////////////
// Include Files
////////////////////////////////////////////////////////////////////////////////////////////////////
#include "precomp.h"
#include "PropPg.h"
////////////////////////////////////////////////////////////////////////////////////////////////////
// Construction, Destruction, and Initialization funcs
////////////////////////////////////////////////////////////////////////////////////////////////////
//--------------------------------------------------------------------------------------------------
// CPropertySheetPage::CPropertySheetPage
CPropertySheetPage::CPropertySheetPage( void ) { _InitData(); }
//--------------------------------------------------------------------------------------------------
// CPropertySheetPage::CPropertySheetPage
CPropertySheetPage::CPropertySheetPage( const CPropertySheetPage& r ) { _InitData(); *this = r; }
//--------------------------------------------------------------------------------------------------
// CPropertySheetPage::CPropertySheetPage
// pszTemplate can specify either the resource identifier of the template
// or the address of a string that specifies the name of the template
CPropertySheetPage::CPropertySheetPage( LPCTSTR pszTemplate, DLGPROC pfnDlgProc, DWORD dwFlags /* = 0 */, LPARAM lParam /* = 0L */ ) {
_InitData();
this -> dwFlags = dwFlags; if( ! _Set_hInstance( g_hInstance ) ) { return; } if( ! _Set_pszTemplate( pszTemplate ) ) { return; } if( ! _Set_pfnDlgProc( pfnDlgProc ) ) { return; } if( ! _Set_lParam( lParam ) ) { return; } if( ! _Validate() ) { return; } }
//--------------------------------------------------------------------------------------------------
// CPropertySheetPage::CPropertySheetPage
CPropertySheetPage::CPropertySheetPage( LPCDLGTEMPLATE pResource, DLGPROC pfnDlgProc, DWORD dwFlags /* = 0 */, LPARAM lParam /* = 0L */ ) {
_InitData(); this -> dwFlags = dwFlags; if( ! _Set_hInstance( g_hInstance ) ) { return; } if( ! _Set_pResource( pResource ) ) { return; } if( ! _Set_pfnDlgProc( pfnDlgProc ) ) { return; } if( ! _Set_lParam( lParam ) ) { return; } if( ! _Validate() ) { return; }
}
//--------------------------------------------------------------------------------------------------
// CPropertySheetPage::CPropertySheetPage
// pszTemplate can specify either the resource identifier of the template
// or the address of a string that specifies the name of the template
CPropertySheetPage::CPropertySheetPage( LPCTSTR pszTemplate, DLGPROC pfnDlgProc, HICON hIcon, /* = NULL */ LPCTSTR pszTitle /* = NULL */, DWORD dwFlags, /* = 0 */ LPARAM lParam /* =NULL */, LPFNPSPCALLBACK pfnCallBack, /* =NULL */ UINT FAR * pcRefParent /* =NULL */ ) { _InitData(); this -> dwFlags = dwFlags;
if( ! _Set_hInstance( g_hInstance ) ) { return; } if( ! _Set_pszTemplate( pszTemplate ) ) { return; } if( ! _Set_hIcon( hIcon ) ) { return; } if( ! _Set_pszTitle( pszTitle ) ) { return; } if( ! _Set_pfnDlgProc( pfnDlgProc ) ) { return; } if( ! _Set_lParam( lParam ) ) { return; } if( ! _Set_pfnCallback( pfnCallBack ) ) { return; } if( ! _Set_pcRefParent( pcRefParent ) ) { return; } if( ! _Validate() ) { return; }
}
//--------------------------------------------------------------------------------------------------
// CPropertySheetPage::CPropertySheetPage
CPropertySheetPage::CPropertySheetPage( LPCDLGTEMPLATE pResource, DLGPROC pfnDlgProc, HICON hIcon, /* = NULL */ LPCTSTR pszTitle /* = NULL */, DWORD dwFlags, /* = 0 */ LPARAM lParam /* =NULL */, LPFNPSPCALLBACK pfnCallBack,/* =NULL */ UINT FAR * pcRefParent /* =NULL */ ) {
_InitData(); this -> dwFlags = dwFlags;
if( ! _Set_hInstance( g_hInstance ) ) { return; } if( ! _Set_pResource( pResource ) ) { return; } if( ! _Set_hIcon( hIcon ) ) { return; } if( ! _Set_pszTitle( pszTitle ) ) { return; } if( ! _Set_pfnDlgProc( pfnDlgProc ) ) { return; } if( ! _Set_lParam( lParam ) ) { return; } if( ! _Set_pfnCallback( pfnCallBack ) ) { return; } if( ! _Set_pcRefParent( pcRefParent ) ) { return; } if( ! _Validate() ) { return; }
}
//--------------------------------------------------------------------------------------------------
// CPropertySheetPage::CPropertySheetPage
CPropertySheetPage::CPropertySheetPage( LPCTSTR pszTemplate, DLGPROC pfnDlgProc, LPCTSTR pszIcon /* =0 */, LPCTSTR pszTitle /* = NULL */, DWORD dwFlags, /* = 0 */ LPARAM lParam /* =NULL */, LPFNPSPCALLBACK pfnCallBack, /* =NULL */ UINT FAR * pcRefParent /* =NULL */ ) { _InitData(); this -> dwFlags = dwFlags;
if( ! _Set_hInstance( g_hInstance ) ) { return; } if( ! _Set_pszTemplate( pszTemplate ) ) { return; } if( ! _Set_pszIcon( pszIcon ) ) { return; } if( ! _Set_pszTitle( pszTitle ) ) { return; } if( ! _Set_pfnDlgProc( pfnDlgProc ) ) { return; } if( ! _Set_lParam( lParam ) ) { return; } if( ! _Set_pfnCallback( pfnCallBack ) ) { return; } if( ! _Set_pcRefParent( pcRefParent ) ) { return; } if( ! _Validate() ) { return; }
}
//--------------------------------------------------------------------------------------------------
// CPropertySheetPage::CPropertySheetPage
CPropertySheetPage::CPropertySheetPage( LPCDLGTEMPLATE pResource, DLGPROC pfnDlgProc, LPCTSTR pszIcon /* =0 */, LPCTSTR pszTitle /* = NULL */, DWORD dwFlags, /* = 0 */ LPARAM lParam /* =NULL */, LPFNPSPCALLBACK pfnCallBack, /* =NULL */ UINT FAR * pcRefParent /* =NULL */ ) {
_InitData(); this -> dwFlags = dwFlags;
if( ! _Set_hInstance( g_hInstance ) ) { return; } if( ! _Set_pResource( pResource ) ) { return; } if( ! _Set_pszIcon( pszIcon ) ) { return; } if( ! _Set_pszTitle( pszTitle ) ) { return; } if( ! _Set_pfnDlgProc( pfnDlgProc ) ) { return; } if( ! _Set_lParam( lParam ) ) { return; } if( ! _Set_pfnCallback( pfnCallBack ) ) { return; } if( ! _Set_pcRefParent( pcRefParent ) ) { return; } if( ! _Validate() ) { return; } }
//--------------------------------------------------------------------------------------------------
// CPropertySheetPage::CPropertySheetPage
CPropertySheetPage::CPropertySheetPage( LPCPROPSHEETPAGE pPageVector ) {
memcpy( this, pPageVector, sizeof( PROPSHEETPAGE ) ); _Validate(); }
//--------------------------------------------------------------------------------------------------
// CPropertySheetPage::~CPropertySheetPage
CPropertySheetPage::~CPropertySheetPage( void ) {
}
////////////////////////////////////////////////////////////////////////////////////////////////////
// Public Member Fns
////////////////////////////////////////////////////////////////////////////////////////////////////
//--------------------------------------------------------------------------------------------------
// operator= assigns *this to another CPropertySheetPage
// Because there are no pointers or references in the PROPSHEETPAGE structure, the contents may
// simply be memory copied
CPropertySheetPage& CPropertySheetPage::operator=( const CPropertySheetPage& r ) { LPCPROPSHEETPAGE pcSrc = static_cast< LPCPROPSHEETPAGE >( &r ); LPPROPSHEETPAGE pDst = static_cast< LPPROPSHEETPAGE >( this );
memcpy( pDst, pcSrc, sizeof( PROPSHEETPAGE ) );
return *this; }
////////////////////////////////////////////////////////////////////////////////////////////////////
// Private Helper Fns
////////////////////////////////////////////////////////////////////////////////////////////////////
void CPropertySheetPage::_InitData( void ) { ZeroMemory( this, sizeof( PROPSHEETPAGE ) ); this -> dwSize = sizeof( PROPSHEETPAGE ); this -> dwFlags |= PSP_DEFAULT; } //--------------------------------------------------------------------------------------------------
// _IsRightToLeftLocale is called to determine the value of one of the flags in the PROPSHEETPAGE
// datastructure. If this is to be a robust and complete wrapper class, this should be implemented
BOOL CPropertySheetPage::_IsRightToLeftLocale( void ) const { // BUGBUG
// this is not implemented, and it may not act properly when implemented,
// Look at the the usage as well
return FALSE; }
////////////////////////////////////////////////////////////////////////////////////////////////////
// Data Setting and validation funcs
////////////////////////////////////////////////////////////////////////////////////////////////////
//--------------------------------------------------------------------------------------------------
// _Set_hInstance
BOOL CPropertySheetPage::_Set_hInstance( HINSTANCE hInst ) {
#ifdef CPropertySheetPage_ValidateParameters
if( NULL == hInst ) { assert( 0 ); return FALSE; }
#endif // CPropertySheetPage_ValidateParameters
this -> hInstance = hInst;
return TRUE; }
//--------------------------------------------------------------------------------------------------
// _Set_pszTemplate
BOOL CPropertySheetPage::_Set_pszTemplate( LPCTSTR pszTemplate ) {
#ifdef CPropertySheetPage_ValidateParameters
if( NULL == pszTemplate ) { assert( 0 ); return FALSE; } if( this -> dwFlags & PSP_DLGINDIRECT ) { // If the PSP_DLGINDIRECT is set, pszTemplate is ignored
assert( 0 ); return FALSE; }
#endif // CPropertySheetPage_ValidateParameters
this -> pszTemplate = pszTemplate; return TRUE; }
//--------------------------------------------------------------------------------------------------
// _Set_pResource
BOOL CPropertySheetPage::_Set_pResource( LPCDLGTEMPLATE pResource ) {
#ifdef CPropertySheetPage_ValidateParameters
if( NULL == pResource ) { assert( 0 ); return FALSE; }
#endif // CPropertySheetPage_ValidateParameters
this -> pResource = pResource; this -> dwFlags |= PSP_DLGINDIRECT; return TRUE; }
//--------------------------------------------------------------------------------------------------
// _Set_hIcon
BOOL CPropertySheetPage::_Set_hIcon( HICON hIcon ) {
#ifdef CPropertySheetPage_ValidateParameters
if( ( NULL == hIcon ) && ( dwFlags & PSP_USEHICON ) ) { assert( 0 ); return FALSE; } if ( dwFlags & PSP_USEICONID ) { assert( 0 ); return FALSE; }
#endif // CPropertySheetPage_ValidateParameters
if( NULL != hIcon ) { this -> dwFlags |= PSP_USEHICON; this -> hIcon = hIcon; } return TRUE; }
//--------------------------------------------------------------------------------------------------
// _Set_pszIcon
BOOL CPropertySheetPage::_Set_pszIcon( LPCTSTR pszIcon ) {
#ifdef CPropertySheetPage_ValidateParameters
if( ( NULL == pszIcon ) && ( dwFlags & PSP_USEICONID ) ) { // This is a bad parameter
assert( 0 ); return FALSE; }
if ( dwFlags & PSP_USEHICON ) { // Wrong function signature, use the one that takes LPCTSTR pszIcon /* =0 */
assert( 0 ); return FALSE; }
#endif // CPropertySheetPage_ValidateParameters
if( NULL != pszIcon ) { this -> pszIcon = pszIcon; this -> dwFlags |= PSP_USEICONID; }
return TRUE; }
//--------------------------------------------------------------------------------------------------
// _Set_pszTitle
BOOL CPropertySheetPage::_Set_pszTitle( LPCTSTR pszTitle ) {
#ifdef CPropertySheetPage_ValidateParameters
if( ( NULL == pszTitle ) && ( dwFlags & PSP_USETITLE ) ) { // This is a bad parameter
assert( 0 ); return FALSE; }
#endif // CPropertySheetPage_ValidateParameters
if( NULL != pszTitle ) { this -> pszTitle = pszTitle; this -> dwFlags |= PSP_USETITLE; }
return TRUE; }
//--------------------------------------------------------------------------------------------------
// _Set_pfnDlgProc
BOOL CPropertySheetPage::_Set_pfnDlgProc( DLGPROC pfnDlgProc ) {
#ifdef CPropertySheetPage_ValidateParameters
if( NULL == pfnDlgProc ) { assert( 0 ); return FALSE; } #endif // CPropertySheetPage_ValidateParameters
this -> pfnDlgProc = pfnDlgProc; return TRUE; }
//--------------------------------------------------------------------------------------------------
// _Set_pfnCallback
BOOL CPropertySheetPage::_Set_pfnCallback( LPFNPSPCALLBACK pfnCallBack ) {
#ifdef CPropertySheetPage_ValidateParameters
if( ( NULL == pfnCallBack ) && ( dwFlags & PSP_USECALLBACK ) ) { // This is a bad parameter
assert( 0 ); return FALSE; }
#endif // CPropertySheetPage_ValidateParameters
if( NULL != pfnCallback ) { this -> pfnCallback = pfnCallback; this -> dwFlags |= PSP_USECALLBACK; }
return TRUE; }
//--------------------------------------------------------------------------------------------------
// _Set_pcRefParent
BOOL CPropertySheetPage::_Set_pcRefParent( UINT FAR * pcRefParent ) {
#ifdef CPropertySheetPage_ValidateParameters
if( ( NULL == pcRefParent ) && ( dwFlags & PSP_USEREFPARENT ) ) { // This is a bad parameter
assert( 0 ); return FALSE; }
#endif // CPropertySheetPage_ValidateParameters
if( NULL != pcRefParent ) { this -> pcRefParent = pcRefParent; this -> dwFlags |= PSP_USEREFPARENT; }
return TRUE;
}
//--------------------------------------------------------------------------------------------------
// _Set_lParam
BOOL CPropertySheetPage::_Set_lParam( LPARAM lParam ) {
#ifdef CPropertySheetPage_ValidateParameters
#endif // CPropertySheetPage_ValidateParameters
this -> lParam = lParam;
return TRUE; }
//--------------------------------------------------------------------------------------------------
// _Validate
BOOL CPropertySheetPage::_Validate( void ) const {
#ifdef CPropertySheetPage_ValidateParameters
// Make sure there are no mutually exclusize flags set
if( ( this -> dwFlags & PSP_USEICONID ) && ( this -> dwFlags & PSP_USEHICON ) ) { assert( 0 ); return FALSE; }
// Make sure that the data is valid ( for set flags )
if( this -> dwFlags & PSP_DLGINDIRECT ) { // We must validate pResource
if( NULL == pResource ) { assert( 0 ); return FALSE; } } else { // We must validate pszTemplate
if( NULL == this -> pszTemplate ) { assert( 0 ); return FALSE; } }
if( this -> dwFlags & PSP_USECALLBACK ) { if( NULL == this -> pfnCallback ) { assert( 0 ); return FALSE; } }
if( this -> dwFlags & PSP_USEREFPARENT ) { if( NULL == this -> pcRefParent ) { assert( 0 ); return FALSE; } } if( this -> dwFlags & PSP_USETITLE ) { if( NULL == this -> pszTitle ) { assert( 0 ); return FALSE; } } #endif // CPropertySheetPage_ValidateParameters
return TRUE; }
|