|
|
// RASettingProperty.cpp : Implementation of CRASettingProperty
#include "stdafx.h"
#include "windowsx.h"
#include "RAssistance.h"
#include "RASettingProperty.h"
#include "stdio.h"
#define NO_HELP ((DWORD) -1) // Disables Help for a control.
#define HELP_FILE TEXT("SYSDM.HLP")
DWORD aRAHelpIds[] = { //IDC_ENABLERA, HIDC_RA_ENABLE,
IDC_ALLOWRC, HIDC_RA_ALLOWRC, IDC_GROUP1, HIDC_RA_ALLOWRC, IDC_ALLOWUNSOLICIT, HIDC_RA_ALLOWUNSOLICIT, IDC_NUMBERCOMBO, HIDC_RA_EXPIRY, IDC_UNITCOMBO, HIDC_RA_EXPIRY, IDC_TIMEOUTTXT, HIDC_RA_EXPIRY, IDC_GROUP2, HIDC_RA_EXPIRY, IDC_STATIC_TEXT, NO_HELP, 0, 0 };
extern HINSTANCE g_hInst;
/************************************************
RemoteAssistanceProc: DlgProc of Remote Assistance setup ************************************************/ INT_PTR RemoteAssistanceProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam ) { static CRASettingProperty* pRaSetting = NULL;
switch (uMsg) { case WM_INITDIALOG: { TCHAR sTmp[32]; int i; HWND hList; RA_SETTING *p; int iFocus = IDC_ALLOWRC;
pRaSetting = (CRASettingProperty*)lParam;
if (pRaSetting->m_bUseNewSetting) p = &pRaSetting->newSetting; else p = &pRaSetting->oldSetting; /*
if (p->m_bEnableRA) CheckDlgButton(hDlg,IDC_ENABLERA, BST_CHECKED);
if (p->m_bAllowUnsolicited) CheckDlgButton(hDlg,IDC_ALLOWUNSOLICIT, BST_CHECKED); */
CheckDlgButton(hDlg, IDC_ALLOWRC, p->m_bAllowFullControl?BST_CHECKED:BST_UNCHECKED); iFocus = IDC_ALLOWRC;
// Add Numbers
hList = GetDlgItem(hDlg, IDC_NUMBERCOMBO); for (i=1; i<100; i++) { wsprintf(sTmp, TEXT("%d"), i); ComboBox_AddString(hList, sTmp); } //ComboBox_SetCurSel(hList, p->m_iNumber);
wsprintf(sTmp, TEXT("%d"), p->m_iNumber); ComboBox_SetText(hList, sTmp);
// Add Units
hList = GetDlgItem(hDlg, IDC_UNITCOMBO); i=0; if (LoadString(g_hInst, IDS_UNIT_MINUTE, sTmp, 32)) ComboBox_AddString(hList, sTmp); if (LoadString(g_hInst, IDS_UNIT_HOUR, sTmp, 32)) ComboBox_AddString(hList, sTmp); if (LoadString(g_hInst, IDS_UNIT_DAY, sTmp, 32)) ComboBox_AddString(hList, sTmp);
ComboBox_SetCurSel(hList, p->m_iUnit); SetFocus(GetDlgItem(hDlg, iFocus)); return FALSE; } break; case WM_HELP: // F1
WinHelp((HWND)((LPHELPINFO)lParam)->hItemHandle, HELP_FILE, HELP_WM_HELP, (DWORD_PTR)(LPSTR)aRAHelpIds); break; case WM_CONTEXTMENU: // right-click help
WinHelp((HWND)wParam, HELP_FILE, HELP_CONTEXTMENU, (DWORD_PTR)(LPSTR)aRAHelpIds); break; case WM_COMMAND: switch (LOWORD(wParam)) { case IDC_NUMBERCOMBO: { if (HIWORD(wParam) == CBN_EDITUPDATE) { BOOL bOK; DWORD nVal;
TCHAR sTmp[MAX_PATH]; if (GetDlgItemText(hDlg,IDC_NUMBERCOMBO,&sTmp[0],MAX_PATH-1)) { nVal = (DWORD)GetDlgItemInt(hDlg, IDC_NUMBERCOMBO, &bOK, FALSE); if (!bOK || nVal > 99) { CComBSTR bstrErrMsg; CComBSTR bstrTitle; if (bstrErrMsg.LoadString(IDS_VALID_NUMBER) && bstrTitle.LoadString(IDS_PROJNAME)) { MessageBox(hDlg, bstrErrMsg, bstrTitle, MB_OK | MB_ICONERROR); }
// Set it back to default.
wsprintf(sTmp, TEXT("%d"), pRaSetting->oldSetting.m_iNumber); ComboBox_SetText(GetDlgItem(hDlg, IDC_NUMBERCOMBO), sTmp); return TRUE; } }
} break; }
case IDCANCEL: pRaSetting->put_IsCancelled(TRUE); EndDialog(hDlg, 0); break;
case IDOK: { TCHAR sTmp[11]; wsprintf(sTmp, TEXT("0"));
// Map control value to local variables.
// pRaSetting->newSetting.m_bEnableRA = (IsDlgButtonChecked(hDlg,IDC_ENABLERA) == BST_CHECKED);
// pRaSetting->newSetting.m_bAllowUnsolicited = (IsDlgButtonChecked(hDlg,IDC_ALLOWUNSOLICIT)==BST_CHECKED);
pRaSetting->newSetting.m_bAllowFullControl = (IsDlgButtonChecked(hDlg,IDC_ALLOWRC)==BST_CHECKED); ComboBox_GetText(GetDlgItem(hDlg, IDC_NUMBERCOMBO), sTmp, 10); DWORD iUnit = ComboBox_GetCurSel(GetDlgItem(hDlg, IDC_UNITCOMBO)); //The max allowed value for number of days is 30 if the value selected is above 30 then
//show and error message and break without closing the dialog and set focus to number dropdown.
if ( (iUnit == RA_IDX_DAY) && (_ttoi(sTmp) > RA_MAX_DAYS) ) { CComBSTR bstrTitle; CComBSTR bstrErrMsg; bstrTitle.LoadString(IDS_PROJNAME); bstrErrMsg.LoadString(IDS_VALID_DAYS); if (bstrTitle.LoadString(IDS_PROJNAME) && bstrErrMsg.LoadString(IDS_VALID_DAYS)) MessageBoxW(NULL,bstrErrMsg,bstrTitle,MB_OK | MB_ICONERROR); SetFocus(GetDlgItem(hDlg, IDC_NUMBERCOMBO)); wsprintf(sTmp, TEXT("30")); //RA_MAX_DAYS VALUE
SetDlgItemText(hDlg,IDC_NUMBERCOMBO,sTmp); break; }
pRaSetting->newSetting.m_iNumber = _ttoi(sTmp); pRaSetting->newSetting.m_iUnit = iUnit;
// In case users open the dialog again before APPLY the changes.
pRaSetting->m_bUseNewSetting = TRUE;
EndDialog(hDlg, 0); } break; default: { // indicat not handled
return FALSE; } } break; // WM_COMMAND
default: return FALSE; }
return TRUE; }
/////////////////////////////////////////////////////////////////////////////
// CRASettingProperty
/******************************
Func: get_IsCancelled Abstract: Is the action get cancelled *******************************/ STDMETHODIMP CRASettingProperty::get_IsCancelled(BOOL *pVal) { *pVal = m_bCancelled; return S_OK; }
STDMETHODIMP CRASettingProperty::put_IsCancelled(BOOL newVal) { m_bCancelled = newVal; return S_OK; }
/*************************************
Func: IsChanged Abstract: Check if the RA setting values have been changed. Return: TRUE (changed) else FALSE **************************************/ STDMETHODIMP CRASettingProperty::get_IsChanged(BOOL *pVal) { *pVal = FALSE;
if (!m_bCancelled && !(oldSetting == newSetting)) *pVal = TRUE;
return S_OK; }
/********************************************
Func: Init Abstract: Initialize this object. Get setting values from Registry. *********************************************/ STDMETHODIMP CRASettingProperty::Init() { HRESULT hr = GetRegSetting(); if (SUCCEEDED(hr)) { newSetting = oldSetting; }
return hr; }
/**************************************************************
Func: GetRegSetting Abstract: Get RA Settnig dialog's Registry values to oldSetting member. ***************************************************************/ HRESULT CRASettingProperty::GetRegSetting() { // If any value is not found, use the default value.
DWORD dwValue; DWORD dwSize; HKEY hKey = NULL; if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_KEY_REMOTEASSISTANCE, 0, KEY_READ, &hKey)) { // Get value
/*
dwSize = sizeof(DWORD); if (ERROR_SUCCESS == RegQueryValueEx(hKey, RA_CTL_RA_MODE, 0, NULL, (LPBYTE)&dwValue, &dwSize )) { oldSetting.m_bEnableRA = !!dwValue; } dwSize = sizeof(DWORD); if (ERROR_SUCCESS == RegQueryValueEx(hKey, RA_CTL_ALLOW_UNSOLICITED, 0, NULL, (LPBYTE)&dwValue, &dwSize)) { oldSetting.m_bAllowUnsolicited = !!dwValue; } */
dwValue=0; dwSize = sizeof(DWORD); if (ERROR_SUCCESS == RegQueryValueEx(hKey, RA_CTL_ALLOW_FULLCONTROL, 0, NULL, (LPBYTE)&dwValue, &dwSize )) { oldSetting.m_bAllowFullControl = !!dwValue;; }
dwValue=0; dwSize = sizeof(DWORD); if (ERROR_SUCCESS == RegQueryValueEx(hKey, RA_CTL_COMBO_NUMBER, 0, NULL, (LPBYTE)&dwValue, &dwSize )) { oldSetting.m_iNumber = dwValue; }
dwValue=0; dwSize = sizeof(DWORD); if (ERROR_SUCCESS == RegQueryValueEx(hKey, RA_CTL_COMBO_UNIT, 0, NULL, (LPBYTE)&dwValue, &dwSize )) { oldSetting.m_iUnit = dwValue; }
RegCloseKey(hKey); }
return S_OK; }
/**************************************************************
Func: SetRegSetting Abstract: Set RA setting dialog values to registry. ***************************************************************/ STDMETHODIMP CRASettingProperty::SetRegSetting() { HRESULT hr = E_FAIL; HKEY hKey; DWORD dwAwFullControl /*,dwAwUnsolicited */;
//dwAwUnsolicited = newSetting.m_bAllowUnsolicited;
dwAwFullControl = newSetting.m_bAllowFullControl;
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_LOCAL_MACHINE, REG_KEY_REMOTEASSISTANCE, 0, KEY_WRITE, &hKey)) { if (//ERROR_SUCCESS==RegSetValueEx(hKey,RA_CTL_ALLOW_UNSOLICITED,0,REG_DWORD,(LPBYTE)&dwAwUnsolicited,sizeof(DWORD)) &&
ERROR_SUCCESS==RegSetValueEx(hKey,RA_CTL_ALLOW_FULLCONTROL,0,REG_DWORD,(LPBYTE)&dwAwFullControl,sizeof(DWORD)) && ERROR_SUCCESS==RegSetValueEx(hKey,RA_CTL_COMBO_NUMBER,0,REG_DWORD,(LPBYTE)&newSetting.m_iNumber,sizeof(DWORD)) && ERROR_SUCCESS==RegSetValueEx(hKey,RA_CTL_COMBO_UNIT,0,REG_DWORD,(LPBYTE)&newSetting.m_iUnit,sizeof(DWORD))) { hr = S_OK;
// Sync old and new settings
oldSetting = newSetting; }
RegCloseKey(hKey); }
return hr; }
/**************************************************************
Func: ShowDialogBox Abstract: Display the RA setting dialog ***************************************************************/ STDMETHODIMP CRASettingProperty::ShowDialogBox(HWND hWndParent) { HRESULT hr = S_OK; m_bCancelled = FALSE; HMODULE hModule = GetModuleHandle(TEXT("RACPLDlg.dll")); INT_PTR i;
if (!hModule) { hr = HRESULT_FROM_WIN32(GetLastError()); goto done; }
i = DialogBoxParam(hModule, (LPTSTR) MAKEINTRESOURCE(IDD_RASETTINGS_DIALOG), hWndParent, RemoteAssistanceProc, (LPARAM)this); if (i == -1) { hr = HRESULT_FROM_WIN32(GetLastError()); }
done: return hr; }
|