windows-nt/Source/XPSP1/NT/termsrv/reskit/tsreg/shadow.c
2020-09-26 16:20:57 +08:00

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
///////////////////////////////////////////////////////////////////////////////