486 lines
14 KiB
C++
486 lines
14 KiB
C++
////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// 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;
|
|
}
|
|
|