389 lines
15 KiB
C
389 lines
15 KiB
C
/*---------------------------------------------**
|
|
** Copyright (c) 1998 Microsoft Corporation **
|
|
** All Rights reserved **
|
|
** **
|
|
** shadow.c **
|
|
** **
|
|
** Shadow bitmap dialog - TSREG **
|
|
** 07-01-98 a-clindh Created **
|
|
**---------------------------------------------*/
|
|
|
|
#include <windows.h>
|
|
#include <commctrl.h>
|
|
#include <TCHAR.H>
|
|
#include <stdlib.h>
|
|
#include "tsreg.h"
|
|
#include "resource.h"
|
|
|
|
|
|
HWND g_hwndShadowBitmapDlg;
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
|
|
INT_PTR CALLBACK ShadowBitmap(HWND hDlg, UINT nMsg,
|
|
WPARAM wParam, LPARAM lParam)
|
|
{
|
|
NMHDR *lpnmhdr;
|
|
static HWND hwndComboCacheSize;
|
|
static HWND hwndSliderNumCaches;
|
|
static HWND hwndEditNumCaches;
|
|
static HWND hwndSliderDistProp[PERCENT_COMBO_COUNT];
|
|
static HWND hwndSliderDistBuddy[PERCENT_COMBO_COUNT];
|
|
static HWND hwndPropChkBox[PERCENT_COMBO_COUNT];
|
|
static TCHAR lpszRegPath[MAX_PATH];
|
|
|
|
TCHAR lpszBuffer[6];
|
|
TCHAR lpszMBoxTitle[25];
|
|
TCHAR lpszMBoxError[90];
|
|
LPHELPINFO lphi;
|
|
int i, nPos;
|
|
HWND hwndCtl;
|
|
//
|
|
// get a pointer to the NMHDR struct for apply button
|
|
//
|
|
lpnmhdr = (LPNMHDR) lParam;
|
|
|
|
switch (nMsg) {
|
|
|
|
case WM_NOTIFY:
|
|
//
|
|
// save settings
|
|
//
|
|
switch (lpnmhdr->code) {
|
|
case PSN_KILLACTIVE:
|
|
SetWindowLongPtr(lpnmhdr->hwndFrom, DWLP_MSGRESULT, FALSE);
|
|
break;
|
|
|
|
case PSN_HELP:
|
|
lphi = (LPHELPINFO) lParam;
|
|
WinHelp(lphi->hItemHandle,
|
|
g_lpszPath, HELP_CONTENTS, lphi->iCtrlId);
|
|
break;
|
|
|
|
case PSN_APPLY:
|
|
SaveBitmapSettings(lpszRegPath);
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_VSCROLL:
|
|
|
|
hwndCtl = (HWND) (lParam);
|
|
i = (int)GetWindowLongPtr(hwndCtl, GWLP_USERDATA);
|
|
nPos = (int) SendMessage(hwndSliderDistProp[i], TBM_GETPOS, 0,0);
|
|
GetWindowText(hwndSliderDistBuddy[i], lpszBuffer, 4);
|
|
//
|
|
// save cache size values to global data struct
|
|
//
|
|
g_KeyInfo[CACHEPROP1 + i].CurrentKeyValue = _ttoi(lpszBuffer);
|
|
//
|
|
// display values in edit controls
|
|
//
|
|
_itot(10 * (11 - nPos), lpszBuffer, 10);
|
|
SetWindowText(hwndSliderDistBuddy[i], lpszBuffer);
|
|
break;
|
|
|
|
case WM_HSCROLL:
|
|
|
|
nPos = (int) SendMessage(hwndSliderNumCaches, TBM_GETPOS, 0,0);
|
|
_itot(nPos - 1, lpszBuffer, 10);
|
|
SetWindowText(hwndEditNumCaches, lpszBuffer);
|
|
//
|
|
// save values to global data struct (number caches)
|
|
//
|
|
g_KeyInfo[NUM_CELL_CACHES_INDEX].CurrentKeyValue = nPos - 1;
|
|
//
|
|
// enable/disable check boxes and sliders
|
|
//
|
|
EnableControls(hDlg, hwndSliderDistProp,
|
|
hwndPropChkBox, hwndSliderDistBuddy,
|
|
hwndEditNumCaches, hwndSliderNumCaches,
|
|
PERCENT_COMBO_COUNT, lpszRegPath);
|
|
break;
|
|
|
|
case WM_INITDIALOG:
|
|
|
|
LoadString (g_hInst, IDS_REG_PATH,
|
|
lpszRegPath, sizeof (lpszRegPath));
|
|
//
|
|
// get handles
|
|
//
|
|
g_hwndShadowBitmapDlg = hDlg;
|
|
hwndComboCacheSize = GetDlgItem(hDlg, IDC_COMBO_CACHE_SIZE);
|
|
hwndSliderNumCaches = GetDlgItem(hDlg, IDC_SLD_NO_CACHES);
|
|
hwndEditNumCaches = GetDlgItem(hDlg, IDC_TXT_NO_CACHES);
|
|
//
|
|
// set range on slider
|
|
//
|
|
SendMessage(hwndSliderNumCaches, TBM_SETRANGE, TRUE,
|
|
(LPARAM) MAKELONG(1, 6));
|
|
|
|
for (i = 0; i < PERCENT_COMBO_COUNT; i++) {
|
|
hwndSliderDistProp[i] = GetDlgItem(hDlg, IDC_SLD_DST_PROP_1 + i);
|
|
hwndPropChkBox[i] = GetDlgItem(hDlg, IDC_CHK_CSH_1 + i);
|
|
hwndSliderDistBuddy[i] = GetDlgItem(hDlg, IDC_TXT_DST_PROP_1 + i);
|
|
//
|
|
// save the index of the control
|
|
//
|
|
SetWindowLongPtr(hwndSliderDistProp[i], GWLP_USERDATA, i);
|
|
SetWindowLongPtr(hwndSliderDistBuddy[i], GWLP_USERDATA, i);
|
|
|
|
SendMessage(hwndSliderDistProp[i], TBM_SETRANGE, TRUE,
|
|
(LPARAM) MAKELONG(1, 11));
|
|
|
|
//
|
|
// get values for persistent caching check boxes
|
|
//
|
|
if (GetRegKey(NUM_CACHE_INDEX + i, lpszRegPath) == 0)
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX + i].CurrentKeyValue =
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX +
|
|
i].DefaultKeyValue;
|
|
else
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX + i].CurrentKeyValue =
|
|
GetRegKeyValue(BM_PERSIST_BASE_INDEX + i);
|
|
|
|
//
|
|
// get values for sliders
|
|
//
|
|
if (GetRegKey(CACHEPROP1 + i, lpszRegPath) == 0)
|
|
g_KeyInfo[CACHEPROP1 + i].CurrentKeyValue =
|
|
g_KeyInfo[CACHEPROP1 + i].DefaultKeyValue;
|
|
else
|
|
g_KeyInfo[CACHEPROP1 + i].CurrentKeyValue =
|
|
GetRegKeyValue(CACHEPROP1 + i);
|
|
|
|
_itot(g_KeyInfo[CACHEPROP1 + i].CurrentKeyValue,
|
|
lpszBuffer, 10);
|
|
//
|
|
// display the value in the static edit controls (dist prop.)
|
|
//
|
|
SetWindowText(hwndSliderDistBuddy[i], lpszBuffer);
|
|
//
|
|
// position the thumb on the slider control
|
|
//
|
|
nPos = g_KeyInfo[CACHEPROP1 + i].CurrentKeyValue;
|
|
SendMessage(hwndSliderDistProp[i], TBM_SETPOS, TRUE,
|
|
11 - nPos / 10);
|
|
|
|
} // end for loop **************************************************
|
|
|
|
|
|
//
|
|
// get value from registry for number of enabled
|
|
// check & slider controls
|
|
//
|
|
if (GetRegKey(NUM_CELL_CACHES_INDEX, lpszRegPath) == 0)
|
|
g_KeyInfo[NUM_CELL_CACHES_INDEX].CurrentKeyValue =
|
|
g_KeyInfo[NUM_CELL_CACHES_INDEX].DefaultKeyValue;
|
|
else
|
|
g_KeyInfo[NUM_CELL_CACHES_INDEX].CurrentKeyValue =
|
|
GetRegKeyValue(NUM_CELL_CACHES_INDEX);
|
|
//
|
|
// show number of enabled caches in edit box
|
|
//
|
|
_itot(g_KeyInfo[NUM_CELL_CACHES_INDEX].CurrentKeyValue,
|
|
lpszBuffer, 10);
|
|
SetWindowText(hwndEditNumCaches, lpszBuffer);
|
|
//
|
|
// position the thumb on the slider control (num caches)
|
|
//
|
|
SendMessage(hwndSliderNumCaches, TBM_SETPOS, TRUE,
|
|
g_KeyInfo[NUM_CELL_CACHES_INDEX].CurrentKeyValue + 1);
|
|
//
|
|
// enable/disable check boxes and sliders
|
|
//
|
|
EnableControls(hDlg, hwndSliderDistProp,
|
|
hwndPropChkBox, hwndSliderDistBuddy,
|
|
hwndEditNumCaches, hwndSliderNumCaches,
|
|
PERCENT_COMBO_COUNT, lpszRegPath);
|
|
//
|
|
// display text in cache size edit box from registry
|
|
//
|
|
g_KeyInfo[CACHESIZEINDEX].CurrentKeyValue =
|
|
(GetRegKeyValue(CACHESIZEINDEX));
|
|
|
|
if ( (g_KeyInfo[CACHESIZEINDEX].CurrentKeyValue <
|
|
MIN_BITMAP_CACHE_SIZE) ||
|
|
(g_KeyInfo[CACHESIZEINDEX].CurrentKeyValue >
|
|
MAX_BITMAP_CACHE_SIZE)) {
|
|
|
|
g_KeyInfo[CACHESIZEINDEX].CurrentKeyValue =
|
|
g_KeyInfo[CACHESIZEINDEX].DefaultKeyValue;
|
|
}
|
|
|
|
_itot( g_KeyInfo[CACHESIZEINDEX].CurrentKeyValue,
|
|
lpszBuffer, 10);
|
|
SetWindowText(hwndComboCacheSize, lpszBuffer);
|
|
//
|
|
// fill the cache size combo box list
|
|
//
|
|
SendMessage(hwndComboCacheSize, CB_ADDSTRING, 0,
|
|
(LPARAM) _itot(MIN_BITMAP_CACHE_SIZE, lpszBuffer, 10));
|
|
|
|
for (i = CACHE_LIST_STEP_VAL;
|
|
i <= MAX_BITMAP_CACHE_SIZE;
|
|
i+= CACHE_LIST_STEP_VAL) {
|
|
|
|
_itot(i, lpszBuffer, 10);
|
|
SendMessage(hwndComboCacheSize, CB_ADDSTRING, 0,
|
|
(LPARAM) (LPCTSTR) lpszBuffer);
|
|
} // ** end for loop
|
|
|
|
//
|
|
// limit cache size combo box to 4 characters
|
|
//
|
|
SendMessage(hwndComboCacheSize, CB_LIMITTEXT, 4, 0);
|
|
break;
|
|
|
|
case WM_HELP:
|
|
|
|
lphi = (LPHELPINFO) lParam;
|
|
|
|
WinHelp(lphi->hItemHandle,
|
|
g_lpszPath, HELP_CONTEXTPOPUP, lphi->iCtrlId);
|
|
break;
|
|
|
|
|
|
case WM_COMMAND:
|
|
|
|
switch LOWORD (wParam) {
|
|
|
|
case IDC_BTN_RESTORE:
|
|
|
|
for (i = 0; i < PERCENT_COMBO_COUNT; i++) {
|
|
_itot(g_KeyInfo[i + CACHEPROP1].DefaultKeyValue,
|
|
lpszBuffer, 10);
|
|
SetWindowText(hwndSliderDistProp[i], lpszBuffer);
|
|
g_KeyInfo[i + CACHEPROP1].CurrentKeyValue =
|
|
g_KeyInfo[i + CACHEPROP1].DefaultKeyValue;
|
|
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX + i].CurrentKeyValue =
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX +
|
|
i].DefaultKeyValue;
|
|
}
|
|
|
|
_itot(g_KeyInfo[CACHESIZEINDEX].DefaultKeyValue,
|
|
lpszBuffer, 10);
|
|
SetWindowText(hwndComboCacheSize, lpszBuffer);
|
|
g_KeyInfo[CACHESIZEINDEX].CurrentKeyValue =
|
|
g_KeyInfo[CACHESIZEINDEX].DefaultKeyValue;
|
|
|
|
g_KeyInfo[NUM_CELL_CACHES_INDEX].CurrentKeyValue =
|
|
g_KeyInfo[NUM_CELL_CACHES_INDEX].DefaultKeyValue;
|
|
//
|
|
// enable/disable check boxes and sliders
|
|
//
|
|
EnableControls(hDlg, hwndSliderDistProp,
|
|
hwndPropChkBox, hwndSliderDistBuddy,
|
|
hwndEditNumCaches, hwndSliderNumCaches,
|
|
PERCENT_COMBO_COUNT, lpszRegPath);
|
|
break;
|
|
|
|
case IDC_CHK_CSH_1:
|
|
if(IsDlgButtonChecked(hDlg, IDC_CHK_CSH_1))
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX].CurrentKeyValue = 1;
|
|
else
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX].CurrentKeyValue =
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX].DefaultKeyValue;
|
|
break;
|
|
case IDC_CHK_CSH_2:
|
|
if(IsDlgButtonChecked(hDlg, IDC_CHK_CSH_2))
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX + 1].CurrentKeyValue = 1;
|
|
else
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX + 1].CurrentKeyValue =
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX + 1].DefaultKeyValue;
|
|
break;
|
|
case IDC_CHK_CSH_3:
|
|
if(IsDlgButtonChecked(hDlg, IDC_CHK_CSH_3))
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX + 2].CurrentKeyValue = 1;
|
|
else
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX + 2].CurrentKeyValue =
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX + 2].DefaultKeyValue;
|
|
break;
|
|
case IDC_CHK_CSH_4:
|
|
if(IsDlgButtonChecked(hDlg, IDC_CHK_CSH_4))
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX + 3].CurrentKeyValue = 1;
|
|
else
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX + 3].CurrentKeyValue =
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX + 3].DefaultKeyValue;
|
|
break;
|
|
case IDC_CHK_CSH_5:
|
|
if(IsDlgButtonChecked(hDlg, IDC_CHK_CSH_5))
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX + 4].CurrentKeyValue = 1;
|
|
else
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX + 4].CurrentKeyValue =
|
|
g_KeyInfo[BM_PERSIST_BASE_INDEX + 4].DefaultKeyValue;
|
|
break;
|
|
}
|
|
|
|
|
|
switch HIWORD (wParam) {
|
|
|
|
case CBN_SELCHANGE:
|
|
//
|
|
// get values for cache size
|
|
//
|
|
g_KeyInfo[CACHESIZEINDEX].CurrentKeyValue = (DWORD)
|
|
SendMessage(hwndComboCacheSize, CB_GETCURSEL, 0, 0);
|
|
|
|
SendMessage(hwndComboCacheSize, CB_GETLBTEXT,
|
|
g_KeyInfo[CACHESIZEINDEX].CurrentKeyValue,
|
|
(LPARAM) (LPCSTR) lpszBuffer);
|
|
g_KeyInfo[CACHESIZEINDEX].CurrentKeyValue =
|
|
_ttoi(lpszBuffer);
|
|
break;
|
|
|
|
|
|
case CBN_EDITUPDATE:
|
|
|
|
GetWindowText(hwndComboCacheSize, lpszBuffer, 5);
|
|
g_KeyInfo[CACHESIZEINDEX].CurrentKeyValue =
|
|
_ttoi(lpszBuffer);
|
|
break;
|
|
|
|
case CBN_KILLFOCUS:
|
|
//
|
|
// only allow values within acceptable range
|
|
//
|
|
GetWindowText(hwndComboCacheSize, lpszBuffer, 5);
|
|
g_KeyInfo[CACHESIZEINDEX].CurrentKeyValue =
|
|
_ttoi(lpszBuffer);
|
|
|
|
if ( (g_KeyInfo[CACHESIZEINDEX].CurrentKeyValue <
|
|
MIN_BITMAP_CACHE_SIZE) ||
|
|
(g_KeyInfo[CACHESIZEINDEX].CurrentKeyValue >
|
|
MAX_BITMAP_CACHE_SIZE) ) {
|
|
//
|
|
// display error if cache size is too big
|
|
//
|
|
LoadString (g_hInst,
|
|
IDS_BITMAP_CACHE,
|
|
lpszMBoxTitle,
|
|
sizeof (lpszMBoxTitle));
|
|
|
|
LoadString (g_hInst,
|
|
IDS_BMCACHE_ERROR,
|
|
lpszMBoxError,
|
|
sizeof (lpszMBoxError));
|
|
|
|
MessageBox(hDlg, lpszMBoxError,
|
|
lpszMBoxTitle,
|
|
MB_OK | MB_ICONEXCLAMATION);
|
|
|
|
_itot(g_KeyInfo[CACHESIZEINDEX].DefaultKeyValue,
|
|
lpszBuffer, 10);
|
|
|
|
SetWindowText(hwndComboCacheSize, lpszBuffer);
|
|
|
|
g_KeyInfo[CACHESIZEINDEX].CurrentKeyValue =
|
|
g_KeyInfo[CACHESIZEINDEX].DefaultKeyValue;
|
|
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
// end of file
|
|
///////////////////////////////////////////////////////////////////////////////
|