|
|
/* CB.C
Resident Code Segment // Tweak: make non-resident
Utility routines for checkboxes.
Frosting: Master Theme Selector for Windows '95 Copyright (c) 1994-1998 Microsoft Corporation */
// ---------------------------------------------
// Brief file history:
// Alpha:
// Beta:
// Bug fixes
// ---------
//
// ---------------------------------------------
#include "windows.h"
#include "frost.h"
#include "global.h"
//
// InitCheckboxes
// Actually, you are init'ing the stored state of the checkboxes.
// All from saved registry values initially; or just checked if no stored
// values. This gets picked up on the first call to EnableThemeButtons().
//
void FAR InitCheckboxes() { extern TCHAR szPlus_CBs[]; LONG lret; HKEY hKey; int iter; TCHAR szState[5]; DWORD dwSize; DWORD dwType; // we're going to try to read from the registry
lret = RegOpenKeyEx( HKEY_CURRENT_USER, szPlus_CBs, (DWORD)0, KEY_QUERY_VALUE, (PHKEY)&hKey );
// check that you got a good key here
if (lret == ERROR_SUCCESS) {
// go through each checkbox and read stored state from registry
for (iter = 0; iter < MAX_FCHECKS; iter ++) {
// first do paranoid check of data size
lret = RegQueryValueEx(hKey, (LPTSTR)szCBNames[iter], (LPDWORD)NULL, (LPDWORD)&dwType, (LPBYTE)NULL, (LPDWORD)&dwSize); if (ERROR_SUCCESS == lret) { // here's the size check before getting the data
if (dwSize > ((DWORD)5 * sizeof(TCHAR))) { Assert(FALSE, TEXT("Large entry for checkbox state!\n")); lret = ERROR_SUCCESS - 5; // set error flag for check below
}
else //
// now really get the value
lret = RegQueryValueEx(hKey, (LPTSTR)szCBNames[iter], (LPDWORD)NULL, (LPDWORD)&dwType, (LPBYTE)szState, (LPDWORD)&dwSize); }
//
// if you got something, go ahead and use it to set checkbox state!
//
if (ERROR_SUCCESS == lret) { // invalid value defaults to TRUE/checked, so check for valid FALSE/unchecked
bCBStates[iter] = (szState[0] == TEXT('0') ? FALSE : TRUE); }
// otherwise, use ultimate error case
else { Assert(FALSE, TEXT("couldn't read one of the checkbox states\n")); // always easy worst case default: just init to checked
// Except for CB_SCHEDULE -- if it can't be read we want
// to default to off.
if (FC_SCHEDULE == iter) bCBStates[iter] = FALSE; else bCBStates[iter] = TRUE; } }
// cleanup
RegCloseKey(hKey); }
else { // couldn't open key, so just set to checked
Assert(FALSE, TEXT("problem opening Checkbox registry to init checkboxes\n")); for (iter = 0; iter < MAX_FCHECKS; iter ++) { if (FC_SCHEDULE == iter) bCBStates[iter] = FALSE; else bCBStates[iter] = TRUE; } } }
//
// Save/RestoreCheckboxes
// Save/Restore the state of the checkboxes to/from the states array.
// The checkbox ID array defines order saved in the states array.
//
// Globals: sets values in global bCBStates[] array.
//
void FAR SaveCheckboxes() { int iter;
for (iter = 0; iter < MAX_FCHECKS; iter ++) { bCBStates[iter] = IsDlgButtonChecked(hWndApp, iCBIDs[iter]); } }
//
// Assumes caller has already enabled all the buttons so they can be checked.
void FAR RestoreCheckboxes() { int iter;
for (iter = 0; iter < MAX_FCHECKS; iter ++) { CheckDlgButton(hWndApp, iCBIDs[iter], bCBStates[iter]); } }
// IsAnyBoxChecked()
//
// Returns TRUE if any of the theme setting checkboxes are checked.
// We ignore the SCHEDULE checkbox setting.
BOOL FAR IsAnyBoxChecked() { BOOL bRet = FALSE; int iter;
for (iter = 0; (iter < MAX_FCHECKS) && !bRet; iter ++) { if (FC_SCHEDULE != iter) { bRet = bRet | IsDlgButtonChecked(hWndApp, iCBIDs[iter]); } }
return (bRet); }
|