You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
510 lines
15 KiB
510 lines
15 KiB
//
|
|
// proplocalres.cpp: local resources property sheet dialog proc
|
|
//
|
|
// Tab B
|
|
//
|
|
// Copyright Microsoft Corporation 2000
|
|
// nadima
|
|
|
|
#include "stdafx.h"
|
|
|
|
|
|
#define TRC_GROUP TRC_GROUP_UI
|
|
#define TRC_FILE "proplocalres"
|
|
#include <atrcapi.h>
|
|
|
|
#include "sh.h"
|
|
|
|
#include "commctrl.h"
|
|
#include "proplocalres.h"
|
|
|
|
#ifdef OS_WINCE
|
|
#include <ceconfig.h>
|
|
#endif
|
|
|
|
//
|
|
// Controls that need to be disabled/enabled
|
|
// during connection (for progress animation)
|
|
//
|
|
CTL_ENABLE connectingDisableCtlsPLocalRes[] = {
|
|
{IDC_COMBO_SOUND_OPTIONS, FALSE},
|
|
{IDC_COMBO_SEND_KEYS, FALSE},
|
|
{IDC_CHECK_REDIRECT_DRIVES, FALSE},
|
|
{IDC_CHECK_REDIRECT_PRINTERS, FALSE},
|
|
{IDC_CHECK_REDIRECT_COM, FALSE},
|
|
{IDC_CHECK_REDIRECT_SMARTCARD, FALSE}
|
|
};
|
|
|
|
const UINT numConnectingDisableCtlsPLocalRes =
|
|
sizeof(connectingDisableCtlsPLocalRes)/
|
|
sizeof(connectingDisableCtlsPLocalRes[0]);
|
|
|
|
|
|
CPropLocalRes* CPropLocalRes::_pPropLocalResInstance = NULL;
|
|
|
|
CPropLocalRes::CPropLocalRes(HINSTANCE hInstance, CTscSettings* pTscSet, CSH* pSh)
|
|
{
|
|
DC_BEGIN_FN("CPropLocalRes");
|
|
_hInstance = hInstance;
|
|
CPropLocalRes::_pPropLocalResInstance = this;
|
|
_pTscSet = pTscSet;
|
|
_pSh = pSh;
|
|
|
|
TRC_ASSERT(_pTscSet,(TB,_T("_pTscSet is null")));
|
|
TRC_ASSERT(_pSh,(TB,_T("_pSh is null")));
|
|
|
|
if(!LoadLocalResourcesPgStrings())
|
|
{
|
|
TRC_ERR((TB, _T("Failed LoadLocalResourcesPgStrings()")));
|
|
}
|
|
|
|
//
|
|
// Disable keyb hook on win9x.
|
|
//
|
|
_fRunningOnWin9x = FALSE;
|
|
|
|
#ifdef OS_WINCE
|
|
OSVERSIONINFO osVersionInfo;
|
|
osVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
|
|
#else
|
|
OSVERSIONINFOA osVersionInfo;
|
|
osVersionInfo.dwOSVersionInfoSize = sizeof(OSVERSIONINFOA);
|
|
#endif
|
|
|
|
//call A version to avoid wrapping
|
|
#ifdef OS_WINCE
|
|
if(GetVersionEx(&osVersionInfo))
|
|
#else
|
|
if(GetVersionExA(&osVersionInfo))
|
|
#endif
|
|
{
|
|
_fRunningOnWin9x = (osVersionInfo.dwPlatformId ==
|
|
VER_PLATFORM_WIN32_WINDOWS);
|
|
}
|
|
else
|
|
{
|
|
_fRunningOnWin9x = FALSE;
|
|
TRC_ERR((TB,_T("GetVersionEx failed: %d\n"), GetLastError()));
|
|
}
|
|
|
|
|
|
DC_END_FN();
|
|
}
|
|
|
|
CPropLocalRes::~CPropLocalRes()
|
|
{
|
|
CPropLocalRes::_pPropLocalResInstance = NULL;
|
|
}
|
|
|
|
INT_PTR CALLBACK CPropLocalRes::StaticPropPgLocalResDialogProc(HWND hwndDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
//
|
|
// Delegate to appropriate instance (only works for single instance dialogs)
|
|
//
|
|
DC_BEGIN_FN("StaticDialogBoxProc");
|
|
DCINT retVal = 0;
|
|
|
|
TRC_ASSERT(_pPropLocalResInstance, (TB, _T("localres dialog has NULL static instance ptr\n")));
|
|
retVal = _pPropLocalResInstance->PropPgLocalResDialogProc( hwndDlg,
|
|
uMsg,
|
|
wParam,
|
|
lParam);
|
|
|
|
DC_END_FN();
|
|
return retVal;
|
|
}
|
|
|
|
|
|
INT_PTR CALLBACK CPropLocalRes::PropPgLocalResDialogProc (HWND hwndDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
DC_BEGIN_FN("PropPgLocalResDialogProc");
|
|
|
|
switch(uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
#ifndef OS_WINCE
|
|
int i;
|
|
#endif
|
|
//
|
|
// Position the dialog within the tab
|
|
//
|
|
SetWindowPos( hwndDlg, HWND_TOP,
|
|
_rcTabDispayArea.left, _rcTabDispayArea.top,
|
|
_rcTabDispayArea.right - _rcTabDispayArea.left,
|
|
_rcTabDispayArea.bottom - _rcTabDispayArea.top,
|
|
0);
|
|
|
|
InitSendKeysToServerCombo(hwndDlg);
|
|
InitPlaySoundCombo(hwndDlg);
|
|
|
|
BOOL fDriveRedir = _pTscSet->GetDriveRedirection();
|
|
CheckDlgButton(hwndDlg, IDC_CHECK_REDIRECT_DRIVES,
|
|
(fDriveRedir ? BST_CHECKED : BST_UNCHECKED));
|
|
|
|
BOOL fPrinterRedir = _pTscSet->GetPrinterRedirection();
|
|
CheckDlgButton(hwndDlg, IDC_CHECK_REDIRECT_PRINTERS,
|
|
(fPrinterRedir ? BST_CHECKED : BST_UNCHECKED));
|
|
|
|
BOOL fCOMRedir = _pTscSet->GetCOMPortRedirection();
|
|
CheckDlgButton(hwndDlg, IDC_CHECK_REDIRECT_COM,
|
|
(fCOMRedir ? BST_CHECKED : BST_UNCHECKED));
|
|
|
|
BOOL fScardRedir = _pTscSet->GetSCardRedirection();
|
|
CheckDlgButton(hwndDlg, IDC_CHECK_REDIRECT_SMARTCARD,
|
|
(fScardRedir ? BST_CHECKED : BST_UNCHECKED));
|
|
|
|
#ifdef OS_WINCE
|
|
if ((GetFileAttributes(PRINTER_APPLET_NAME) == -1) ||
|
|
(g_CEConfig == CE_CONFIG_WBT))
|
|
{
|
|
ShowWindow(GetDlgItem(hwndDlg,IDC_SETUP_PRINTER),SW_HIDE);
|
|
}
|
|
#endif
|
|
if(!CUT::IsSCardReaderInstalled())
|
|
{
|
|
//
|
|
// Hide the SCard checkbox
|
|
//
|
|
ShowWindow(GetDlgItem(hwndDlg,IDC_CHECK_REDIRECT_SMARTCARD),
|
|
SW_HIDE);
|
|
}
|
|
|
|
_pSh->SH_ThemeDialogWindow(hwndDlg, ETDT_ENABLETAB);
|
|
return TRUE;
|
|
}
|
|
break; //WM_INITDIALOG
|
|
|
|
case WM_TSC_ENABLECONTROLS:
|
|
{
|
|
//
|
|
// wParam is TRUE to enable controls,
|
|
// FALSE to disable them
|
|
//
|
|
CSH::EnableControls( hwndDlg,
|
|
connectingDisableCtlsPLocalRes,
|
|
numConnectingDisableCtlsPLocalRes,
|
|
wParam ? TRUE : FALSE);
|
|
}
|
|
break;
|
|
|
|
#ifdef OS_WINCE
|
|
case WM_COMMAND:
|
|
{
|
|
switch(DC_GET_WM_COMMAND_ID(wParam))
|
|
{
|
|
case IDC_SETUP_PRINTER:
|
|
SHELLEXECUTEINFO sei;
|
|
|
|
memset(&sei,0,sizeof(SHELLEXECUTEINFO));
|
|
sei.cbSize = sizeof(sei);
|
|
sei.hwnd = hwndDlg;
|
|
sei.lpFile = L"ctlpnl.EXE";
|
|
sei.lpParameters = _T("wbtprncpl.dll,0");
|
|
sei.lpDirectory = NULL;
|
|
sei.nShow = SW_SHOWNORMAL;
|
|
|
|
ShellExecuteEx(&sei);
|
|
|
|
break;
|
|
|
|
default:
|
|
{
|
|
if ( (HIWORD(wParam) == BN_CLICKED) && (IDC_CHECK_REDIRECT_PRINTERS == (int)LOWORD(wParam)))
|
|
{
|
|
LRESULT lResult = SendMessage(GetDlgItem(hwndDlg,IDC_CHECK_REDIRECT_PRINTERS),
|
|
BM_GETCHECK,
|
|
0,
|
|
0);
|
|
if ((lResult == BST_CHECKED) && (GetFileAttributes(PRINTER_APPLET_NAME) != -1))
|
|
{
|
|
EnableWindow(GetDlgItem(hwndDlg,IDC_SETUP_PRINTER),TRUE);
|
|
}
|
|
else if (lResult == BST_UNCHECKED)
|
|
{
|
|
EnableWindow(GetDlgItem(hwndDlg,IDC_SETUP_PRINTER),FALSE);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
#endif
|
|
|
|
case WM_SAVEPROPSHEET: //Intentional fallthru
|
|
case WM_DESTROY:
|
|
{
|
|
//
|
|
// Save page settings
|
|
//
|
|
|
|
//keyboard hook
|
|
int keyboardHookMode = (int)SendMessage(
|
|
GetDlgItem(hwndDlg, IDC_COMBO_SEND_KEYS),
|
|
CB_GETCURSEL, 0, 0);
|
|
_pTscSet->SetKeyboardHookMode(keyboardHookMode);
|
|
|
|
//sound redirection
|
|
int soundRedirIdx = (int)SendMessage(
|
|
GetDlgItem(hwndDlg, IDC_COMBO_SOUND_OPTIONS),
|
|
CB_GETCURSEL, 0, 0);
|
|
|
|
int soundMode = MapComboIdxSoundRedirMode(soundRedirIdx);
|
|
_pTscSet->SetSoundRedirectionMode( soundMode);
|
|
|
|
//drive redirection
|
|
BOOL fDriveRedir = IsDlgButtonChecked(hwndDlg,
|
|
IDC_CHECK_REDIRECT_DRIVES);
|
|
_pTscSet->SetDriveRedirection(fDriveRedir);
|
|
|
|
//printer redirection
|
|
BOOL fPrinterRedir = IsDlgButtonChecked(hwndDlg,
|
|
IDC_CHECK_REDIRECT_PRINTERS);
|
|
_pTscSet->SetPrinterRedirection(fPrinterRedir);
|
|
|
|
//com port
|
|
BOOL fCOMPortRedir = IsDlgButtonChecked(hwndDlg,
|
|
IDC_CHECK_REDIRECT_COM);
|
|
_pTscSet->SetCOMPortRedirection(fCOMPortRedir);
|
|
|
|
//scard
|
|
BOOL fSCardRedir = IsDlgButtonChecked(hwndDlg,
|
|
IDC_CHECK_REDIRECT_SMARTCARD);
|
|
_pTscSet->SetSCardRedirection(fSCardRedir);
|
|
|
|
}
|
|
break; //WM_DESTROY
|
|
}
|
|
|
|
DC_END_FN();
|
|
return 0;
|
|
}
|
|
|
|
//
|
|
// Load resources for the local resources dialog
|
|
//
|
|
BOOL CPropLocalRes::LoadLocalResourcesPgStrings()
|
|
{
|
|
DC_BEGIN_FN("LoadLocalResourcesPgStrings");
|
|
|
|
//
|
|
// Load sendkeys strings
|
|
//
|
|
|
|
#ifndef OS_WINCE
|
|
if(!LoadString(_hInstance,
|
|
UI_IDS_SENDKEYS_FSCREEN,
|
|
_szSendKeysInFScreen,
|
|
sizeof(_szSendKeysInFScreen)/sizeof(TCHAR)))
|
|
{
|
|
TRC_ERR((TB, _T("Failed to load UI_IDS_FULLSCREEN")));
|
|
return FALSE;
|
|
}
|
|
#endif
|
|
|
|
if(!LoadString(_hInstance,
|
|
UI_IDS_SENDKEYS_ALWAYS,
|
|
_szSendKeysAlways,
|
|
sizeof(_szSendKeysAlways)/sizeof(TCHAR)))
|
|
{
|
|
TRC_ERR((TB, _T("Failed to load UI_IDS_FULLSCREEN")));
|
|
return FALSE;
|
|
}
|
|
|
|
if(!LoadString(_hInstance,
|
|
UI_IDS_SENDKEYS_NEVER,
|
|
_szSendKeysNever,
|
|
sizeof(_szSendKeysNever)/sizeof(TCHAR)))
|
|
{
|
|
TRC_ERR((TB, _T("Failed to load UI_IDS_FULLSCREEN")));
|
|
return FALSE;
|
|
}
|
|
|
|
//
|
|
// Load playsound strings
|
|
//
|
|
#ifdef OS_WINCE
|
|
HINSTANCE hLibInst = NULL;
|
|
if ((hLibInst = LoadLibrary(_T("WaveApi.dll"))) != NULL)
|
|
{
|
|
#endif
|
|
if(!LoadString(_hInstance,
|
|
UI_IDS_PLAYSOUND_LOCAL,
|
|
_szPlaySoundLocal,
|
|
sizeof(_szPlaySoundLocal)/sizeof(TCHAR)))
|
|
{
|
|
TRC_ERR((TB, _T("Failed to load UI_IDS_PLAYSOUND_LOCAL")));
|
|
return FALSE;
|
|
}
|
|
#ifdef OS_WINCE
|
|
FreeLibrary(hLibInst);
|
|
}
|
|
#endif
|
|
|
|
if(!LoadString(_hInstance,
|
|
UI_IDS_PLAYSOUND_REMOTE,
|
|
_szPlaySoundRemote,
|
|
sizeof(_szPlaySoundRemote)/sizeof(TCHAR)))
|
|
{
|
|
TRC_ERR((TB, _T("Failed to load UI_IDS_PLAYSOUND_REMOTE")));
|
|
return FALSE;
|
|
}
|
|
|
|
if(!LoadString(_hInstance,
|
|
UI_IDS_PLAYSOUND_NOSOUND,
|
|
_szPlaySoundNowhere,
|
|
sizeof(_szPlaySoundNowhere)/sizeof(TCHAR)))
|
|
{
|
|
TRC_ERR((TB, _T("Failed to load UI_IDS_PLAYSOUND_NOSOUND")));
|
|
return FALSE;
|
|
}
|
|
|
|
DC_END_FN();
|
|
return TRUE;
|
|
}
|
|
|
|
void CPropLocalRes::InitSendKeysToServerCombo(HWND hwndPropPage)
|
|
{
|
|
|
|
//
|
|
// This call can be used to re-intialize a combo
|
|
// so delete any items first
|
|
//
|
|
#ifndef OS_WINCE
|
|
INT ret = 1;
|
|
while(ret && ret != CB_ERR)
|
|
{
|
|
ret = SendDlgItemMessage(hwndPropPage,
|
|
IDC_COMBO_SEND_KEYS,
|
|
CBEM_DELETEITEM,
|
|
0,0);
|
|
}
|
|
#else
|
|
SendDlgItemMessage(hwndPropPage, IDC_COMBO_SEND_KEYS, CB_RESETCONTENT, 0, 0);
|
|
#endif
|
|
|
|
//Order of the string has to match the keyboard
|
|
//hook mode options.
|
|
SendDlgItemMessage(hwndPropPage,
|
|
IDC_COMBO_SEND_KEYS,
|
|
CB_ADDSTRING,
|
|
0,
|
|
(LPARAM)(PDCTCHAR)_szSendKeysNever);
|
|
|
|
SendDlgItemMessage(hwndPropPage,
|
|
IDC_COMBO_SEND_KEYS,
|
|
CB_ADDSTRING,
|
|
0,
|
|
(LPARAM)(PDCTCHAR)_szSendKeysAlways);
|
|
|
|
#ifndef OS_WINCE
|
|
SendDlgItemMessage(hwndPropPage,
|
|
IDC_COMBO_SEND_KEYS,
|
|
CB_ADDSTRING,
|
|
0,
|
|
(LPARAM)(PDCTCHAR)_szSendKeysInFScreen);
|
|
#endif
|
|
|
|
|
|
if(!_fRunningOnWin9x)
|
|
{
|
|
SendDlgItemMessage(hwndPropPage, IDC_COMBO_SEND_KEYS,
|
|
CB_SETCURSEL,
|
|
(WPARAM)_pTscSet->GetKeyboardHookMode(),0);
|
|
}
|
|
else
|
|
{
|
|
//Feature disabled on 9x, force selection to first option
|
|
//and disable UI so it can't be changed.
|
|
SendDlgItemMessage(hwndPropPage, IDC_COMBO_SEND_KEYS,
|
|
CB_SETCURSEL,
|
|
(WPARAM)0,0);
|
|
EnableWindow(GetDlgItem(hwndPropPage,IDC_COMBO_SEND_KEYS), FALSE);
|
|
}
|
|
|
|
}
|
|
|
|
void CPropLocalRes::InitPlaySoundCombo(HWND hwndPropPage)
|
|
{
|
|
|
|
//
|
|
// This call can be used to re-intialize a combo
|
|
// so delete any items first
|
|
//
|
|
#ifndef OS_WINCE
|
|
INT ret = 1;
|
|
while(ret && ret != CB_ERR)
|
|
{
|
|
ret = SendDlgItemMessage(hwndPropPage,
|
|
IDC_COMBO_SOUND_OPTIONS,
|
|
CBEM_DELETEITEM,
|
|
0,0);
|
|
}
|
|
#else
|
|
SendDlgItemMessage(hwndPropPage, IDC_COMBO_SOUND_OPTIONS, CB_RESETCONTENT, 0, 0);
|
|
#endif
|
|
|
|
|
|
//Order of the string has to match the sound
|
|
//mode options.
|
|
#ifdef OS_WINCE
|
|
HINSTANCE hLibInst = NULL;
|
|
if ((hLibInst = LoadLibrary(_T("WaveApi.dll"))) != NULL)
|
|
{
|
|
#endif
|
|
SendDlgItemMessage(hwndPropPage,
|
|
IDC_COMBO_SOUND_OPTIONS,
|
|
CB_ADDSTRING,
|
|
0,
|
|
(LPARAM)(PDCTCHAR)_szPlaySoundLocal);
|
|
#ifdef OS_WINCE
|
|
FreeLibrary(hLibInst);
|
|
}
|
|
#endif
|
|
SendDlgItemMessage(hwndPropPage,
|
|
IDC_COMBO_SOUND_OPTIONS,
|
|
CB_ADDSTRING,
|
|
0,
|
|
(LPARAM)(PDCTCHAR)_szPlaySoundNowhere);
|
|
|
|
SendDlgItemMessage(hwndPropPage,
|
|
IDC_COMBO_SOUND_OPTIONS,
|
|
CB_ADDSTRING,
|
|
0,
|
|
(LPARAM)(PDCTCHAR)_szPlaySoundRemote);
|
|
|
|
int soundIdx = MapComboIdxSoundRedirMode(_pTscSet->GetSoundRedirectionMode());
|
|
SendDlgItemMessage(hwndPropPage, IDC_COMBO_SOUND_OPTIONS,
|
|
CB_SETCURSEL,(WPARAM)(WPARAM)
|
|
soundIdx,0);
|
|
|
|
}
|
|
|
|
//
|
|
// Maps from the sound combo index to the
|
|
// appropriate sound mode value
|
|
// what happened here is that the two bottom strings
|
|
// in the combo were flipped (the function is bidirectional)
|
|
//
|
|
int CPropLocalRes::MapComboIdxSoundRedirMode(int idx)
|
|
{
|
|
int ret=0;
|
|
switch (idx)
|
|
{
|
|
case 0:
|
|
return 0;
|
|
case 1:
|
|
return 2;
|
|
case 2:
|
|
return 1;
|
|
default:
|
|
return 0;
|
|
}
|
|
}
|
|
|