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.
598 lines
20 KiB
598 lines
20 KiB
#include "precomp.h"
|
|
|
|
#include "rsopsec.h"
|
|
#include <urlmon.h>
|
|
#include <wininet.h>
|
|
#ifdef WINNT
|
|
#include <winineti.h>
|
|
#endif // WINNT
|
|
|
|
#define REGSTR_PRIVACYPS_PATH TEXT("Software\\Policies\\Microsoft\\Internet Explorer")
|
|
#define REGSTR_PRIVACYPS_VALU TEXT("PrivacyAddRemoveSites")
|
|
|
|
#define ENABLEAPPLY(hDlg) SendMessage( GetParent(hDlg), PSM_CHANGED, (WPARAM)hDlg, 0L )
|
|
|
|
typedef struct {
|
|
DWORD dwType; // what is the type of lParam? is it an unknown passed in with a
|
|
// property page addition (0), passed in with a
|
|
// DialogBoxParam call (1), or a new IEPROPPAGEINFO2 ptr for RSoP(2)?
|
|
LPARAM lParam;
|
|
} INETCPL_PPAGE_LPARAM, *LPINETCPL_PPAGE_LPARAM;
|
|
|
|
// structure to pass info to the control panel
|
|
typedef struct {
|
|
UINT cbSize; // size of the structure
|
|
DWORD dwFlags; // enabled page flags (remove pages)
|
|
LPSTR pszCurrentURL; // the current URL (NULL=none)
|
|
DWORD dwRestrictMask; // disable sections of the control panel
|
|
DWORD dwRestrictFlags; // masking for the above
|
|
} IEPROPPAGEINFO, *LPIEPROPPAGEINFO;
|
|
|
|
// structure to pass info to the control panel
|
|
// The RSOP field(s) should eventually be moved to the original
|
|
// IEPROPPAGEINFO struct and this structure can be removed
|
|
typedef struct {
|
|
LPIEPROPPAGEINFO piepi;
|
|
BSTR bstrRSOPNamespace;
|
|
} IEPROPPAGEINFO2, *LPIEPROPPAGEINFO2;
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Advanced privacy settings dialog
|
|
//
|
|
// We store the advanced settings in the privacy slider struct because it
|
|
// can be easily retrieved from the main privacy dlg. Either we need to
|
|
// pass RSoP data from the main dlg to the advanced dlg, or we need to query
|
|
// WMI twice. Since WMI queries are slow, we'll do the former.
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
typedef struct _privslider {
|
|
|
|
DWORD_PTR dwLevel;
|
|
BOOL fAdvanced;
|
|
BOOL fCustom;
|
|
HFONT hfontBolded;
|
|
BOOL fEditDisabled;
|
|
|
|
DWORD dwTemplateFirst;
|
|
WCHAR szSessionFirst[MAX_PATH];
|
|
DWORD dwTemplateThird;
|
|
WCHAR szSessionThird[MAX_PATH];
|
|
|
|
} PRIVSLIDER, *PPRIVSLIDER;
|
|
|
|
|
|
DWORD MapPrefToIndex(WCHAR wcPref)
|
|
{
|
|
switch(wcPref)
|
|
{
|
|
case 'r': return 1; // reject
|
|
case 'p': return 2; // prompt
|
|
default: return 0; // default is accept
|
|
}
|
|
}
|
|
|
|
WCHAR MapRadioToPref(HWND hDlg, DWORD dwResource)
|
|
{
|
|
if(IsDlgButtonChecked(hDlg, dwResource + 1)) // deny
|
|
{
|
|
return 'r';
|
|
}
|
|
|
|
if(IsDlgButtonChecked(hDlg, dwResource + 2)) // prompt
|
|
{
|
|
return 'p';
|
|
}
|
|
|
|
// deafult is accept
|
|
return 'a';
|
|
}
|
|
|
|
|
|
void OnAdvancedInit(HWND hDlg, HWND hwndPrivPage)
|
|
{
|
|
BOOL fSession = FALSE;
|
|
DWORD dwFirst = IDC_FIRST_ACCEPT;
|
|
DWORD dwThird = IDC_THIRD_ACCEPT;
|
|
|
|
PPRIVSLIDER pData = NULL;
|
|
|
|
// if we're not in RSoP mode, this returns NULL
|
|
pData = (PPRIVSLIDER)GetWindowLongPtr(hwndPrivPage, DWLP_USER);
|
|
|
|
if(NULL != pData && pData->fAdvanced)
|
|
{
|
|
WCHAR szBuffer[MAX_PATH];
|
|
// MAX_PATH is sufficent for advanced mode setting strings, MaxPrivacySettings is overkill.
|
|
LPWSTR pszBuffer = szBuffer;
|
|
WCHAR *pszAlways;
|
|
DWORD dwError = (DWORD)-1L; // anything but ERROR_SUCCESS
|
|
|
|
//
|
|
// turn on advanced check box
|
|
//
|
|
CheckDlgButton(hDlg, IDC_USE_ADVANCED, TRUE);
|
|
|
|
//
|
|
// Figure out first party setting and session
|
|
//
|
|
pszBuffer = pData->szSessionFirst;
|
|
if (0 != pszBuffer[0])
|
|
dwError = ERROR_SUCCESS;
|
|
|
|
if(ERROR_SUCCESS == dwError)
|
|
{
|
|
pszAlways = StrStrW(pszBuffer, L"always=");
|
|
if(pszAlways)
|
|
{
|
|
dwFirst = IDC_FIRST_ACCEPT + MapPrefToIndex(*(pszAlways + 7));
|
|
}
|
|
|
|
if(StrStrW(pszBuffer, L"session"))
|
|
{
|
|
fSession = TRUE;
|
|
}
|
|
}
|
|
|
|
//
|
|
// Figure out third party setting
|
|
//
|
|
pszBuffer = pData->szSessionThird;
|
|
if (0 != pszBuffer[0])
|
|
dwError = ERROR_SUCCESS;
|
|
|
|
if(ERROR_SUCCESS == dwError)
|
|
{
|
|
WCHAR *pszAlways;
|
|
|
|
pszAlways = StrStrW(pszBuffer, L"always=");
|
|
if(pszAlways)
|
|
{
|
|
dwThird = IDC_THIRD_ACCEPT + MapPrefToIndex(*(pszAlways + 7));
|
|
}
|
|
}
|
|
}
|
|
|
|
CheckRadioButton(hDlg, IDC_FIRST_ACCEPT, IDC_FIRST_PROMPT, dwFirst);
|
|
CheckRadioButton(hDlg, IDC_THIRD_ACCEPT, IDC_THIRD_PROMPT, dwThird);
|
|
CheckDlgButton( hDlg, IDC_SESSION_OVERRIDE, fSession);
|
|
}
|
|
|
|
void OnAdvancedEnable(HWND hDlg)
|
|
{
|
|
EnableWindow(GetDlgItem(hDlg, IDC_USE_ADVANCED), FALSE);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_FIRST_ACCEPT), FALSE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_FIRST_DENY), FALSE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_FIRST_PROMPT), FALSE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_THIRD_ACCEPT), FALSE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_THIRD_DENY), FALSE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_THIRD_PROMPT), FALSE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_SESSION_OVERRIDE), FALSE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_TX_FIRST), FALSE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_TX_THIRD), FALSE);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_PRIVACY_EDIT), FALSE);
|
|
}
|
|
|
|
INT_PTR CALLBACK PrivAdvancedDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam,LPARAM lParam)
|
|
{
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
OnAdvancedInit(hDlg, (HWND)lParam);
|
|
OnAdvancedEnable(hDlg);
|
|
return TRUE;
|
|
|
|
case WM_HELP: // F1
|
|
// ResWinHelp( (HWND)((LPHELPINFO)lParam)->hItemHandle, IDS_HELPFILE,
|
|
// HELP_WM_HELP, (DWORD_PTR)(LPSTR)mapIDCsToIDHs);
|
|
break;
|
|
|
|
case WM_CONTEXTMENU: // right mouse click
|
|
// ResWinHelp( (HWND) wParam, IDS_HELPFILE,
|
|
// HELP_CONTEXTMENU, (DWORD_PTR)(LPSTR)mapIDCsToIDHs);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch(LOWORD(wParam))
|
|
{
|
|
case IDOK:
|
|
// fall through
|
|
|
|
case IDCANCEL:
|
|
EndDialog(hDlg, IDOK == LOWORD(wParam));
|
|
return 0;
|
|
|
|
case IDC_FIRST_ACCEPT:
|
|
case IDC_FIRST_PROMPT:
|
|
case IDC_FIRST_DENY:
|
|
CheckRadioButton(hDlg, IDC_FIRST_ACCEPT, IDC_FIRST_PROMPT, LOWORD(wParam));
|
|
return 0;
|
|
|
|
case IDC_THIRD_ACCEPT:
|
|
case IDC_THIRD_PROMPT:
|
|
case IDC_THIRD_DENY:
|
|
CheckRadioButton(hDlg, IDC_THIRD_ACCEPT, IDC_THIRD_PROMPT, LOWORD(wParam));
|
|
return 0;
|
|
|
|
case IDC_USE_ADVANCED:
|
|
OnAdvancedEnable(hDlg);
|
|
return 0;
|
|
|
|
case IDC_PRIVACY_EDIT:
|
|
// DialogBox(MLGetHinst(), MAKEINTRESOURCE(IDD_PRIVACY_PERSITE),
|
|
// hDlg, PrivPerSiteDlgProc);
|
|
return 0;
|
|
}
|
|
break;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Privacy pane
|
|
//
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
#define PRIVACY_LEVELS 6
|
|
#define SLIDER_LEVEL_CUSTOM 6
|
|
|
|
TCHAR szPrivacyLevel[PRIVACY_LEVELS + 1][30];
|
|
TCHAR szPrivacyDescription[PRIVACY_LEVELS + 1][300];
|
|
|
|
void EnablePrivacyControls(HWND hDlg, BOOL fCustom)
|
|
{
|
|
WCHAR szBuffer[256];
|
|
|
|
if( fCustom)
|
|
LoadString( g_hInstance, IDS_PRIVACY_SLIDERCOMMANDDEF, szBuffer, ARRAYSIZE( szBuffer));
|
|
else
|
|
LoadString( g_hInstance, IDS_PRIVACY_SLIDERCOMMANDSLIDE, szBuffer, ARRAYSIZE( szBuffer));
|
|
|
|
SendMessage(GetDlgItem(hDlg, IDC_PRIVACY_SLIDERCOMMAND), WM_SETTEXT,
|
|
0, (LPARAM)szBuffer);
|
|
|
|
// slider disabled when custom
|
|
EnableWindow(GetDlgItem(hDlg, IDC_LEVEL_SLIDER), !fCustom);
|
|
ShowWindow(GetDlgItem(hDlg, IDC_LEVEL_SLIDER), !fCustom);
|
|
|
|
// disable controls if in read-only mode
|
|
EnableWindow(GetDlgItem(hDlg, IDC_LEVEL_SLIDER), FALSE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_PRIVACY_DEFAULT), FALSE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_PRIVACY_IMPORT), FALSE);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_PRIVACY_IMPORT), FALSE);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_PRIVACY_ADVANCED), fCustom);
|
|
if (fCustom)
|
|
{
|
|
// Give advanced button focus since slider is disabled
|
|
SendMessage( hDlg, WM_NEXTDLGCTL,
|
|
(WPARAM)GetDlgItem( hDlg, IDC_PRIVACY_ADVANCED),
|
|
MAKELPARAM( TRUE, 0));
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
HRESULT OnPrivacyInitRSoP(CDlgRSoPData *pDRD, PPRIVSLIDER pData)
|
|
{
|
|
HRESULT hr = E_FAIL;
|
|
__try
|
|
{
|
|
pData->fAdvanced = FALSE;
|
|
|
|
BSTR bstrClass = SysAllocString(L"RSOP_IEPrivacySettings");
|
|
BSTR bstrPrecedenceProp = SysAllocString(L"rsopPrecedence");
|
|
if (NULL != bstrClass && NULL != bstrPrecedenceProp)
|
|
{
|
|
WCHAR wszObjPath[128];
|
|
DWORD dwCurGPOPrec = pDRD->GetImportedSecZonesPrec();
|
|
|
|
// create the object path of this privacy instance for this GPO
|
|
wnsprintf(wszObjPath, countof(wszObjPath),
|
|
L"RSOP_IEPrivacySettings.rsopID=\"IEAK\",rsopPrecedence=%ld", dwCurGPOPrec);
|
|
_bstr_t bstrObjPath = wszObjPath;
|
|
|
|
ComPtr<IWbemClassObject> pPrivObj = NULL;
|
|
ComPtr<IWbemServices> pWbemServices = pDRD->GetWbemServices();
|
|
hr = pWbemServices->GetObject(bstrObjPath, 0L, NULL, (IWbemClassObject**)&pPrivObj, NULL);
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
BOOL fPrivacyHandled = FALSE; // unused
|
|
|
|
// useAdvancedSettings field
|
|
pData->fAdvanced = GetWMIPropBool(pPrivObj,
|
|
L"useAdvancedSettings",
|
|
pData->fAdvanced,
|
|
fPrivacyHandled);
|
|
|
|
// firstPartyPrivacyType field
|
|
pData->dwTemplateFirst = GetWMIPropUL(pPrivObj,
|
|
L"firstPartyPrivacyType",
|
|
pData->dwTemplateFirst,
|
|
fPrivacyHandled);
|
|
|
|
// firstPartyPrivacyTypeText field
|
|
GetWMIPropPWSTR(pPrivObj, L"firstPartyPrivacyTypeText",
|
|
pData->szSessionFirst, ARRAYSIZE(pData->szSessionFirst),
|
|
NULL, fPrivacyHandled);
|
|
|
|
// thirdPartyPrivacyType field
|
|
pData->dwTemplateThird = GetWMIPropUL(pPrivObj,
|
|
L"thirdPartyPrivacyType",
|
|
pData->dwTemplateThird,
|
|
fPrivacyHandled);
|
|
|
|
// thirdPartyPrivacyTypeText field
|
|
GetWMIPropPWSTR(pPrivObj, L"thirdPartyPrivacyTypeText",
|
|
pData->szSessionThird, ARRAYSIZE(pData->szSessionThird),
|
|
NULL, fPrivacyHandled);
|
|
}
|
|
|
|
SysFreeString(bstrClass);
|
|
SysFreeString(bstrPrecedenceProp);
|
|
}
|
|
}
|
|
__except(TRUE)
|
|
{
|
|
}
|
|
return hr;
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////
|
|
PPRIVSLIDER OnPrivacyInit(HWND hDlg, CDlgRSoPData *pDRD)
|
|
{
|
|
DWORD i;
|
|
PPRIVSLIDER pData;
|
|
DWORD dwRet, dwType, dwSize, dwValue;
|
|
|
|
// allocate storage for the font and current level
|
|
pData = new PRIVSLIDER;
|
|
if(NULL == pData)
|
|
{
|
|
// doh
|
|
return NULL;
|
|
}
|
|
pData->dwLevel = (DWORD)-1L;
|
|
pData->hfontBolded = NULL;
|
|
pData->fAdvanced = FALSE;
|
|
pData->fCustom = FALSE;
|
|
pData->fEditDisabled = FALSE;
|
|
|
|
// data stored in slider struct to pass RSoP data to advanced dlg
|
|
pData->dwTemplateFirst = PRIVACY_TEMPLATE_CUSTOM;
|
|
pData->szSessionFirst[0] = 0;
|
|
pData->dwTemplateThird = PRIVACY_TEMPLATE_CUSTOM;
|
|
pData->szSessionThird[0] = 0;
|
|
|
|
//
|
|
// Init RSoP variables
|
|
//
|
|
OnPrivacyInitRSoP(pDRD, pData);
|
|
|
|
//
|
|
// Set the font of the name to the bold font
|
|
//
|
|
|
|
// find current font
|
|
HFONT hfontOrig = (HFONT) SendDlgItemMessage(hDlg, IDC_LEVEL, WM_GETFONT, (WPARAM) 0, (LPARAM) 0);
|
|
if(hfontOrig == NULL)
|
|
hfontOrig = (HFONT) GetStockObject(SYSTEM_FONT);
|
|
|
|
// build bold font
|
|
if(hfontOrig)
|
|
{
|
|
LOGFONT lfData;
|
|
if(GetObject(hfontOrig, sizeof(lfData), &lfData) != 0)
|
|
{
|
|
// The distance from 400 (normal) to 700 (bold)
|
|
lfData.lfWeight += 300;
|
|
if(lfData.lfWeight > 1000)
|
|
lfData.lfWeight = 1000;
|
|
pData->hfontBolded = CreateFontIndirect(&lfData);
|
|
if(pData->hfontBolded)
|
|
{
|
|
// the zone level and zone name text boxes should have the same font, so this is okat
|
|
SendDlgItemMessage(hDlg, IDC_LEVEL, WM_SETFONT, (WPARAM) pData->hfontBolded, (LPARAM) MAKELPARAM(FALSE, 0));
|
|
}
|
|
}
|
|
}
|
|
|
|
// initialize slider
|
|
SendDlgItemMessage(hDlg, IDC_LEVEL_SLIDER, TBM_SETRANGE, (WPARAM) (BOOL) FALSE, (LPARAM) MAKELONG(0, PRIVACY_LEVELS - 1));
|
|
SendDlgItemMessage(hDlg, IDC_LEVEL_SLIDER, TBM_SETTICFREQ, (WPARAM) 1, (LPARAM) 0);
|
|
|
|
// initialize strings for levels and descriptions
|
|
for(i=0; i<PRIVACY_LEVELS + 1; i++)
|
|
{
|
|
LoadString(g_hInstance, IDS_PRIVACY_LEVEL_NO_COOKIE + i, szPrivacyLevel[i], ARRAYSIZE(szPrivacyLevel[i]));
|
|
LoadString(g_hInstance, IDS_PRIVACY_DESC_NO_COOKIE + i, szPrivacyDescription[i], ARRAYSIZE(szPrivacyDescription[i]));
|
|
}
|
|
|
|
//
|
|
// Get current internet privacy level
|
|
//
|
|
if(pData->dwTemplateFirst == pData->dwTemplateThird &&
|
|
pData->dwTemplateFirst != PRIVACY_TEMPLATE_CUSTOM)
|
|
{
|
|
// matched template values, set slider to template level
|
|
pData->dwLevel = pData->dwTemplateFirst;
|
|
|
|
if(pData->dwTemplateFirst == PRIVACY_TEMPLATE_ADVANCED)
|
|
{
|
|
pData->fAdvanced = TRUE;
|
|
pData->dwLevel = SLIDER_LEVEL_CUSTOM;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// make custom end of list
|
|
pData->dwLevel = SLIDER_LEVEL_CUSTOM;
|
|
pData->fCustom = TRUE;
|
|
}
|
|
|
|
// move slider to right spot
|
|
SendDlgItemMessage(hDlg, IDC_LEVEL_SLIDER, TBM_SETPOS, (WPARAM)TRUE, (LPARAM)pData->dwLevel);
|
|
|
|
// Enable stuff based on mode
|
|
EnablePrivacyControls(hDlg, ((pData->fAdvanced) || (pData->fCustom)));
|
|
|
|
// save off struct
|
|
SetWindowLongPtr(hDlg, DWLP_USER, (DWORD_PTR)pData);
|
|
|
|
dwRet = SHGetValue(HKEY_CURRENT_USER, REGSTR_PRIVACYPS_PATH, REGSTR_PRIVACYPS_VALU, &dwType, &dwValue, &dwSize);
|
|
|
|
if (ERROR_SUCCESS == dwRet && 1 == dwValue && REG_DWORD == dwType)
|
|
{
|
|
EnableWindow(GetDlgItem(hDlg, IDC_PRIVACY_EDIT), FALSE);
|
|
pData->fEditDisabled = TRUE;
|
|
}
|
|
|
|
return pData;
|
|
}
|
|
|
|
void OnPrivacySlider(HWND hDlg, PPRIVSLIDER pData, CDlgRSoPData *pDRD = NULL)
|
|
{
|
|
DWORD dwPos;
|
|
|
|
if(pData->fCustom || pData->fAdvanced)
|
|
{
|
|
dwPos = SLIDER_LEVEL_CUSTOM;
|
|
}
|
|
else
|
|
{
|
|
dwPos = (DWORD)SendDlgItemMessage(hDlg, IDC_LEVEL_SLIDER, TBM_GETPOS, 0, 0);
|
|
|
|
if(dwPos != pData->dwLevel)
|
|
{
|
|
ENABLEAPPLY(hDlg);
|
|
}
|
|
|
|
if (NULL == pDRD)
|
|
{
|
|
EnableWindow(GetDlgItem(hDlg, IDC_PRIVACY_DEFAULT),
|
|
(dwPos != PRIVACY_TEMPLATE_MEDIUM) ? TRUE : FALSE);
|
|
}
|
|
}
|
|
|
|
if (NULL != pDRD ||
|
|
PRIVACY_TEMPLATE_NO_COOKIES == dwPos || PRIVACY_TEMPLATE_LOW == dwPos || pData->fEditDisabled)
|
|
{
|
|
EnableWindow(GetDlgItem(hDlg, IDC_PRIVACY_EDIT), FALSE);
|
|
}
|
|
else
|
|
{
|
|
EnableWindow(GetDlgItem(hDlg, IDC_PRIVACY_EDIT), TRUE);
|
|
}
|
|
|
|
// on Mouse Move, change the level description only
|
|
SetDlgItemText(hDlg, IDC_LEVEL_DESCRIPTION, szPrivacyDescription[dwPos]);
|
|
SetDlgItemText(hDlg, IDC_LEVEL, szPrivacyLevel[dwPos]);
|
|
}
|
|
|
|
INT_PTR CALLBACK PrivacyDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|
{
|
|
PPRIVSLIDER pData = (PPRIVSLIDER)GetWindowLongPtr(hDlg, DWLP_USER);
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
// IEAK team needs additional info passed in for RSoP, so they're making
|
|
// use of lParam, which doesn't seem to be used as per the comments above
|
|
|
|
// Retrieve Property Sheet Page info
|
|
CDlgRSoPData *pDRD = (CDlgRSoPData*)((LPPROPSHEETPAGE)lParam)->lParam;
|
|
|
|
// The dlg needs to store the RSoP and other info for later use, particularly
|
|
// for the advanced dlg
|
|
// On second thought, all the info is stored in the pData variable - never mind.
|
|
// HWND hwndPSheet = GetParent(hDlg);
|
|
// SetWindowLongPtr(hwndPSheet, GWLP_USERDATA, (LONG_PTR)pDRD);
|
|
|
|
// initialize slider
|
|
pData = OnPrivacyInit(hDlg, pDRD);
|
|
if(pData)
|
|
OnPrivacySlider(hDlg, pData, pDRD);
|
|
return TRUE;
|
|
}
|
|
|
|
case WM_VSCROLL:
|
|
// Slider Messages
|
|
OnPrivacySlider(hDlg, pData);
|
|
return TRUE;
|
|
|
|
case WM_NOTIFY:
|
|
{
|
|
NMHDR *lpnm = (NMHDR *) lParam;
|
|
|
|
ASSERT(lpnm);
|
|
|
|
switch (lpnm->code)
|
|
{
|
|
case PSN_QUERYCANCEL:
|
|
case PSN_KILLACTIVE:
|
|
case PSN_RESET:
|
|
return TRUE;
|
|
|
|
case PSN_APPLY:
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
case WM_DESTROY:
|
|
{
|
|
if(pData)
|
|
{
|
|
if(pData->hfontBolded)
|
|
DeleteObject(pData->hfontBolded);
|
|
|
|
delete pData;
|
|
}
|
|
break;
|
|
}
|
|
case WM_HELP: // F1
|
|
// ResWinHelp( (HWND)((LPHELPINFO)lParam)->hItemHandle, IDS_HELPFILE,
|
|
// HELP_WM_HELP, (DWORD_PTR)(LPSTR)mapIDCsToIDHs);
|
|
break;
|
|
|
|
case WM_CONTEXTMENU: // right mouse click
|
|
// ResWinHelp( (HWND) wParam, IDS_HELPFILE,
|
|
// HELP_CONTEXTMENU, (DWORD_PTR)(LPSTR)mapIDCsToIDHs);
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
switch(LOWORD(wParam))
|
|
{
|
|
case IDC_PRIVACY_DEFAULT:
|
|
return 0;
|
|
|
|
case IDC_PRIVACY_ADVANCED:
|
|
{
|
|
// show advanced, pass in hDlg as lparam so we can get to this prop page's data
|
|
if( DialogBoxParam(g_hInstance, MAKEINTRESOURCE(IDD_PRIVACY_ADVANCED),
|
|
hDlg, PrivAdvancedDlgProc, (LPARAM)hDlg))
|
|
{
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
case IDC_PRIVACY_IMPORT:
|
|
return 0;
|
|
case IDC_PRIVACY_EDIT:
|
|
// DialogBox(MLGetHinst(), MAKEINTRESOURCE(IDD_PRIVACY_PERSITE),
|
|
// hDlg, PrivPerSiteDlgProc);
|
|
return 0;
|
|
}
|
|
break;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|