|
|
/****************************************************************************\
* * hint.cpp * * Created: William Taylor (wtaylor) 01/22/01 * * MS Ratings Hint Handling Class * \****************************************************************************/
#include "msrating.h"
#include "mslubase.h"
#include "hint.h" // CHint
#include "basedlg.h" // CCommonDialogRoutines
#include "debug.h" // TraceMsg()
const int cchHintLength_c = 127; const TCHAR tchAmpersand_c[] = "&"; const TCHAR tchAmpersandReplacement_c[] = "&&";
// Default CHint Constructor
CHint::CHint() { CHint( NULL, 0 ); }
// CHint Constructor with Dialog Window Handle and Hint Control Id.
CHint::CHint( HWND p_hWnd, int p_iId ) { m_hWnd = p_hWnd; m_iId = p_iId; }
// Display the Hint Text on the Dialog Control.
void CHint::DisplayHint( void ) { HWND hwndControl = ::GetDlgItem( m_hWnd, m_iId );
if ( hwndControl != NULL ) { CString strHint;
RetrieveHint( strHint );
// Avoid display of "_" (accelerator) by replacing single "&" with "&&".
strHint.Replace( tchAmpersand_c, tchAmpersandReplacement_c );
::SetWindowText( hwndControl, strHint ); } }
// Initialize the Hint Dialog Control by limiting the Number of Hint Characters.
void CHint::InitHint( void ) { HWND hwndControl = ::GetDlgItem( m_hWnd, m_iId );
if ( hwndControl != NULL ) { ::SendMessage( hwndControl, EM_SETLIMITTEXT, (WPARAM) cchHintLength_c, (LPARAM) 0); } }
// Check for a Blank Hint entered on the Dialog Control.
// Also, give the user the option to enter a non-blank hint.
bool CHint::VerifyHint( void ) { bool fVerified = true; // Default to true so we don't halt user if hint save fails.
CString strHint;
GetHint( strHint );
if ( strHint.IsEmpty() ) { CString strHintRecommended; CString strCaption;
strHintRecommended.LoadString( IDS_HINT_RECOMMENDED ); strCaption.LoadString( IDS_GENERIC );
if ( ::MessageBox( m_hWnd, strHintRecommended, strCaption, MB_YESNO | MB_DEFBUTTON1 ) == IDYES ) { CCommonDialogRoutines cdr;
cdr.SetErrorFocus( m_hWnd, m_iId );
fVerified = false; } }
return fVerified; }
// Save the Dialog Hint Text to the Registry (or Remove the Hint from the Registry if blank).
void CHint::SaveHint( void ) { CString strHint;
GetHint( strHint );
if ( strHint.IsEmpty() ) { RemoveHint(); } else { StoreHint( strHint ); } }
// Remove the Hint from the Registry.
void CHint::RemoveHint( void ) { CRegKey regKey;
if ( regKey.Open( HKEY_LOCAL_MACHINE, ::szRATINGS ) == ERROR_SUCCESS ) { if ( regKey.DeleteValue( szHINTVALUENAME ) != ERROR_SUCCESS ) { TraceMsg( TF_WARNING, "CHint::RemoveHint() - Failed to delete the hint registry value." ); } } else { TraceMsg( TF_WARNING, "CHint::RemoveHint() - Failed to open the ratings registry key." ); } }
// Get the Hint Text from the Dialog's Control (remove leading and trailing blanks).
void CHint::GetHint( CString & p_rstrHint ) { p_rstrHint.Empty();
HWND hwndControl = ::GetDlgItem( m_hWnd, m_iId );
// We shouldn't be attempting to save a hint if the edit control does not exist.
ASSERT( hwndControl );
if ( hwndControl != NULL ) { ::GetWindowText( hwndControl, (LPTSTR) (LPCTSTR) p_rstrHint.GetBufferSetLength( cchHintLength_c + 1 ), cchHintLength_c ); p_rstrHint.ReleaseBuffer(); } }
// Retrieve a previous Hint from the Registry.
void CHint::RetrieveHint( CString & p_rstrHint ) { CRegKey regKey; DWORD dwCount;
p_rstrHint.Empty();
if ( regKey.Open( HKEY_LOCAL_MACHINE, ::szRATINGS, KEY_READ ) == ERROR_SUCCESS ) { dwCount = cchHintLength_c;
if ( regKey.QueryValue( (LPTSTR) (LPCTSTR) p_rstrHint.GetBufferSetLength( cchHintLength_c + 1 ), szHINTVALUENAME, &dwCount ) != ERROR_SUCCESS ) { TraceMsg( TF_WARNING, "CHint::RetrieveHint() - Failed to query the hint registry value." ); }
p_rstrHint.ReleaseBuffer(); } else { TraceMsg( TF_WARNING, "CHint::RetrieveHint() - Failed to open the ratings registry key." ); }
if ( p_rstrHint.IsEmpty() ) { p_rstrHint.LoadString( IDS_NO_HINT ); } }
// Store Hint Text into the Registry.
void CHint::StoreHint( CString & p_rstrHint ) { CRegKey regKey;
if ( regKey.Open( HKEY_LOCAL_MACHINE, ::szRATINGS ) == ERROR_SUCCESS ) { if ( regKey.SetValue( (LPTSTR) (LPCTSTR) p_rstrHint, szHINTVALUENAME ) != ERROR_SUCCESS ) { TraceMsg( TF_WARNING, "CHint::StoreHint() - Failed to save the hint registry value." ); } } else { TraceMsg( TF_WARNING, "CHint::StoreHint() - Failed to create the ratings registry key." ); } }
|