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

378 lines
12 KiB
C

/*---------------------------------------------**
** Copyright (c) 1998 Microsoft Corporation **
** All Rights reserved **
** **
** misc.c **
** **
** Miscellaneous dialog - TSREG **
** 07-01-98 a-clindh Created **
**---------------------------------------------*/
#include <windows.h>
#include <winuser.h>
#include <commctrl.h>
#include <TCHAR.H>
#include <stdlib.h>
#include "tsreg.h"
#include "resource.h"
//HKEY_CURRENT_USER\Control Panel\Desktop\ForegroundLockTimeout. Set it to zero
TCHAR lpszTimoutPath[] = "Control Panel\\Desktop";
TCHAR lpszTimeoutKey[] = "ForegroundLockTimeout";
HWND g_hwndMiscDlg;
///////////////////////////////////////////////////////////////////////////////
INT_PTR CALLBACK Miscellaneous(HWND hDlg, UINT nMsg,
WPARAM wParam, LPARAM lParam)
{
NMHDR *lpnmhdr;
static HWND hwndComboOrder;
static HWND hwndRadioShadowEn, hwndRadioShadowDis;
static HWND hwndRadioDedicatedEn, hwndRadioDedicatedDis;
static HWND hwndSliderTimeout, hwndEditTimeout;
static HWND hwndSliderFrame;
static TCHAR lpszRegPath[MAX_PATH];
TCHAR lpszBuffer[6];
TCHAR lpszMBoxTitle[25];
TCHAR lpszMBoxError[90];
int i, nPos;
LPHELPINFO lphi;
OSVERSIONINFO osvi;
static BOOL bIsWindows98orLater;
static BOOL bIsNT5orLater;
static int nLockValue;
//
// get a pointer to the NMHDR struct for apply button
//
lpnmhdr = (LPNMHDR) lParam;
switch (nMsg) {
case WM_INITDIALOG:
LoadString (g_hInst, IDS_REG_PATH,
lpszRegPath, sizeof (lpszRegPath));
//
// get handles
//
g_hwndMiscDlg = hDlg;
hwndComboOrder = GetDlgItem(hDlg, IDC_COMBO_ORDER);
hwndRadioShadowEn = GetDlgItem(hDlg, IDC_SHADOW_ENABLED);
hwndRadioShadowDis = GetDlgItem(hDlg, IDC_SHADOW_DISABLED);
hwndRadioDedicatedEn = GetDlgItem(hDlg, IDC_DEDICATED_ENABLED);
hwndRadioDedicatedDis = GetDlgItem(hDlg, IDC_DEDICATED_DISABLED);
//
// lock timeout stuff ------->
hwndSliderTimeout = GetDlgItem(hDlg, IDC_SLD_TIMEOUT);
hwndEditTimeout = GetDlgItem(hDlg, IDC_TXT_TIMEOUT);
hwndSliderFrame = GetDlgItem(hDlg, IDC_FRAME_TIMEOUT);
//
// Find out what operating system is is
// before doing the lock timeout stuff
//
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx (&osvi);
bIsWindows98orLater =
(osvi.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) &&
( (osvi.dwMajorVersion > 4) ||
( (osvi.dwMajorVersion == 4) && (osvi.dwMinorVersion > 0) ) );
osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx (&osvi);
bIsNT5orLater =
(osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) &&
( (osvi.dwMajorVersion > 4) ||
( (osvi.dwMajorVersion == 5) ) );
if ((bIsNT5orLater == TRUE) || (bIsWindows98orLater == TRUE)) {
//
// set range on slider
//
SendMessage(hwndSliderTimeout, TBM_SETRANGE, TRUE,
(LPARAM) MAKELONG(1, 6));
//
// get value from registry
//
nPos = GetKeyVal(lpszTimoutPath, lpszTimeoutKey);
// Use '<=' here - if there is no reg value for
// ForegroundWindowLockTimeout, the slider control
// will read -1.
if (nPos <= 0) {
SendMessage(hwndSliderTimeout,
TBM_SETPOS, TRUE, 0);
_itot(0, lpszBuffer, 10);
SetWindowText(hwndEditTimeout, lpszBuffer);
} else {
SendMessage(hwndSliderTimeout, TBM_SETPOS, TRUE,
((nPos / 100000) + 1));
_itot(nPos / 100000, lpszBuffer, 10);
SetWindowText(hwndEditTimeout, lpszBuffer);
}
} else {
//
// disable controls if not NT 5 / Win98 or greater
//
EnableWindow(hwndSliderTimeout, FALSE);
EnableWindow(hwndEditTimeout, FALSE);
EnableWindow(hwndSliderFrame, FALSE);
}
//<------------ end lock timeout stuff
//_____________________________________________________
//
// set radio buttons
//
RestoreSettings(hDlg, SHADOWINDEX,
IDC_SHADOW_DISABLED, IDC_SHADOW_ENABLED,
lpszRegPath);
RestoreSettings(hDlg, DEDICATEDINDEX,
IDC_DEDICATED_ENABLED, IDC_DEDICATED_DISABLED,
lpszRegPath);
// ---------------------------------------
// fill the combo box list with a range of
// typical values.
//
SendMessage(hwndComboOrder, CB_ADDSTRING, 0,
(LPARAM) (LPCTSTR) TEXT("0"));
for (i = 5; i < 55; i+= 5) {
_itot(i, lpszBuffer, 10);
SendMessage(hwndComboOrder, CB_ADDSTRING, 0,
(LPARAM) (LPCTSTR) lpszBuffer);
} // ** end for loop
for (i = 100; i < 1000; i+= 100) {
_itot(i, lpszBuffer, 10);
SendMessage(hwndComboOrder, CB_ADDSTRING, 0,
(LPARAM) (LPCTSTR) lpszBuffer);
} // ** end for loop
for (i = 1000; i < 10000; i+= 1000) {
_itot(i, lpszBuffer, 10);
SendMessage(hwndComboOrder, CB_ADDSTRING, 0,
(LPARAM) (LPCTSTR) lpszBuffer);
} // ** end for loop
for (i = 10000; i < 70000; i+= 10000) {
_itot(i, lpszBuffer, 10);
SendMessage(hwndComboOrder, CB_ADDSTRING, 0,
(LPARAM) (LPCTSTR) lpszBuffer);
} // ** end for loop
//
// end filling the combo box dropdown list.
// ----------------------------------------
//
// limit combo box to 5 characters
//
SendMessage(hwndComboOrder, CB_LIMITTEXT, 5, 0);
//
// set edit box from registry
//
if (GetRegKey(ORDERINDEX, lpszRegPath) == 1) {
g_KeyInfo[ORDERINDEX].CurrentKeyValue =
(GetRegKeyValue(ORDERINDEX));
} else {
g_KeyInfo[ORDERINDEX].CurrentKeyValue =
g_KeyInfo[ORDERINDEX].DefaultKeyValue;
}
//
// write to the edit box
//
_itot( g_KeyInfo[ORDERINDEX].CurrentKeyValue, lpszBuffer, 10);
SetWindowText(hwndComboOrder, lpszBuffer);
break;
case WM_NOTIFY:
switch (lpnmhdr->code) {
case PSN_HELP:
lphi = (LPHELPINFO) lParam;
WinHelp(lphi->hItemHandle,
g_lpszPath, HELP_CONTENTS, lphi->iCtrlId);
break;
case PSN_APPLY:
if (g_KeyInfo[ORDERINDEX].CurrentKeyValue ==
g_KeyInfo[ORDERINDEX].DefaultKeyValue) {
DeleteRegKey(ORDERINDEX, lpszRegPath);
} else {
SetRegKey(ORDERINDEX, lpszRegPath);
}
//
// save radio button settings
//
SaveSettings(hDlg, DEDICATEDINDEX, IDC_DEDICATED_ENABLED,
IDC_DEDICATED_DISABLED, lpszRegPath);
SaveSettings(hDlg, SHADOWINDEX, IDC_SHADOW_DISABLED,
IDC_SHADOW_ENABLED, lpszRegPath);
//
// Write the lock timeout (milliseconds) to
// the registry.
//
SetRegKeyVal(lpszTimoutPath,
lpszTimeoutKey,
(nLockValue - 1) * 100000);
break;
}
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_SHADOW_ENABLED:
CheckDlgButton(hDlg, IDC_SHADOW_DISABLED, FALSE);
break;
case IDC_SHADOW_DISABLED:
CheckDlgButton(hDlg, IDC_SHADOW_ENABLED, FALSE);
break;
case IDC_DEDICATED_ENABLED:
CheckDlgButton(hDlg, IDC_DEDICATED_DISABLED, FALSE);
break;
case IDC_DEDICATED_DISABLED:
CheckDlgButton(hDlg, IDC_DEDICATED_ENABLED, FALSE);
break;
case IDC_MISC_BUTTON_RESTORE:
CheckDlgButton(hDlg, IDC_SHADOW_ENABLED, TRUE);
CheckDlgButton(hDlg, IDC_SHADOW_DISABLED, FALSE);
CheckDlgButton(hDlg, IDC_DEDICATED_DISABLED, TRUE);
CheckDlgButton(hDlg, IDC_DEDICATED_ENABLED, FALSE);
_itot( g_KeyInfo[ORDERINDEX].DefaultKeyValue,
lpszBuffer, 10);
SetWindowText(hwndComboOrder, lpszBuffer);
g_KeyInfo[ORDERINDEX].CurrentKeyValue =
g_KeyInfo[ORDERINDEX].DefaultKeyValue;
//
// Reset the position of the slider control
// for the foreground lock timeout.
//
_itot(LOCK_TIMEOUT / 100000, lpszBuffer, 10);
SetWindowText(hwndEditTimeout, lpszBuffer);
SendMessage(hwndSliderTimeout, TBM_SETPOS, TRUE,
((LOCK_TIMEOUT / 100000) + 1));
nLockValue = (LOCK_TIMEOUT / 100000) + 1;
break;
}
switch HIWORD (wParam) {
case CBN_SELCHANGE:
g_KeyInfo[ORDERINDEX].CurrentKeyValue = (DWORD)
SendMessage(hwndComboOrder, CB_GETCURSEL, 0, 0);
SendMessage(hwndComboOrder, CB_GETLBTEXT,
g_KeyInfo[ORDERINDEX].CurrentKeyValue,
(LPARAM) lpszBuffer);
g_KeyInfo[ORDERINDEX].CurrentKeyValue = _ttoi(lpszBuffer);
break;
case CBN_EDITUPDATE:
GetWindowText(hwndComboOrder, lpszBuffer, 6);
g_KeyInfo[ORDERINDEX].CurrentKeyValue = _ttoi(lpszBuffer);
break;
case CBN_KILLFOCUS:
GetWindowText(hwndComboOrder, lpszBuffer, 6);
g_KeyInfo[ORDERINDEX].CurrentKeyValue = _ttoi(lpszBuffer);
if ( (g_KeyInfo[ORDERINDEX].CurrentKeyValue >
MAX_ORDER_DRAW_VAL) ) {
//
// display error if value is off
//
LoadString (g_hInst, IDS_MISC_TAB, lpszMBoxTitle,
sizeof (lpszMBoxTitle));
LoadString (g_hInst, IDS_ODRAW_ERROR, lpszMBoxError,
sizeof (lpszMBoxError));
MessageBox(hDlg, lpszMBoxError,
lpszMBoxTitle,
MB_OK | MB_ICONEXCLAMATION);
_itot(g_KeyInfo[ORDERINDEX].DefaultKeyValue,
lpszBuffer, 10);
SetWindowText(hwndComboOrder, lpszBuffer);
g_KeyInfo[ORDERINDEX].CurrentKeyValue =
g_KeyInfo[ORDERINDEX].DefaultKeyValue ;
}
break;
}
break;
case WM_HSCROLL:
//
// get the position of the slider control
//
nLockValue = (int) SendMessage(hwndSliderTimeout, TBM_GETPOS, 0,0);
_itot(nLockValue - 1, lpszBuffer, 10);
SetWindowText(hwndEditTimeout, lpszBuffer);
break;
}
return (FALSE);
}
// end of file
///////////////////////////////////////////////////////////////////////////////