windows-nt/Source/XPSP1/NT/enduser/windows.com/wuau/wuauclt/settingsdlg.cpp
2020-09-26 16:20:57 +08:00

313 lines
8.2 KiB
C++

#include "pch.h"
#include "link.h"
#pragma hdrstop
#define AU_ITEMS TEXT("AutoUpdateItems")
void EnableRestoreControls(HWND hWnd, BOOL fEnable)
{
EnableWindow(GetDlgItem(hWnd, IDC_RESTOREHIDDEN), fEnable);
EnableWindow(GetDlgItem(hWnd, IDC_TEXT_HIDDEN1), fEnable);
EnableWindow(GetDlgItem(hWnd, IDC_TEXT_HIDDEN2), fEnable);
}
CSysLink g_SettingsAutoUpdatelink;
CSysLink g_SettingsScheduledInstalllink;
BOOL EnableCombo(HWND hwnd, BOOL bState);
BOOL EnableOptions(HWND hwnd, BOOL bState);
//BOOL FillDaysCombo(HWND hwnd, DWORD dwSchedInstallDay);
//BOOL FillHrsCombo(HWND hwnd, DWORD dwSchedInstallTime);
void OnKeepUptoDate(HWND hwnd);
void MYREInit(HWND hDlg, UINT uId, HFONT hFont);
void LaunchLinkAction(HWND hwnd, UINT uCtrlId);
#ifdef TESTUI
#if 0
void SetServiceOption(
DWORD dwOption,
DWORD dwDay,
DWORD dwTime
);
void GetServiceOption(
LPDWORD lpdwOption,
LPDWORD lpdwDay,
LPDWORD lpdwTime
);
#endif
#endif
void GetDayAndTimeFromUI(
HWND hWnd,
LPDWORD lpdwDay,
LPDWORD lpdwTime
);
BOOL CALLBACK _DlgRestoreProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
{
HWND hwndOwner;
RECT rc, rcDlg, rcOwner;
// Get the owner window and dialog box rectangles.
if ((hwndOwner = GetParent(hwnd)) == NULL)
{
hwndOwner = GetDesktopWindow();
}
GetWindowRect(hwndOwner, &rcOwner);
GetWindowRect(hwnd, &rcDlg);
CopyRect(&rc, &rcOwner);
// Offset the owner and dialog box rectangles so that
// right and bottom values represent the width and
// height, and then offset the owner again to discard
// space taken up by the dialog box.
OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top);
OffsetRect(&rc, -rc.left, -rc.top);
OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom);
// The new position is the sum of half the remaining
// space and the owner's original position.
SetWindowPos(hwnd,
HWND_TOP,
rcOwner.left + (rc.right / 2),
rcOwner.top + (rc.bottom / 2),
0, 0, // ignores size arguments
SWP_NOSIZE);
}
return TRUE;
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
EndDialog(hwnd, TRUE);
return TRUE;
case IDCANCEL:
EndDialog(hwnd, FALSE);
return TRUE;
}
}
return FALSE;
}
LONG SetSettingsColors(HDC hdc, HWND control)
{
SetBkMode(hdc, TRANSPARENT);
return PtrToLong(GetStockObject( HOLLOW_BRUSH ));
}
BOOL CALLBACK SettingsDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HWND oldCurrentDialog;
// DWORD dwOption = AUOPTION_INSTALLONLY_NOTIFY;
// DWORD dwScheduledInstallDay = -1;
// DWORD dwScheduledInstallTime = -1;
AUOPTION auopt;
auopt.dwOption = AUOPTION_INSTALLONLY_NOTIFY;
auopt.dwSchedInstallDay = -1;
auopt.dwSchedInstallTime = -1;
switch(message)
{
case WM_INITDIALOG:
{
oldCurrentDialog = ghCurrentDialog;
ghCurrentDialog = hWnd;
gTopWins.Add(hWnd);
EnableCombo(hWnd, FALSE); //Initially disabled
#ifndef TESTUI
if (FAILED(gInternals->m_getServiceOption(&auopt)))
{
QUITAUClient();
return TRUE;
}
#else
#endif
g_SettingsAutoUpdatelink.SetSysLinkInstanceHandle(ghInstance);
g_SettingsAutoUpdatelink.SubClassWindow(GetDlgItem(hWnd,IDC_STAT_LEARNAUTOUPDATE));
g_SettingsAutoUpdatelink.SetHyperLink(gtszAUOverviewUrl);
g_SettingsAutoUpdatelink.Invalidate();
g_SettingsScheduledInstalllink.SetSysLinkInstanceHandle(ghInstance);
g_SettingsScheduledInstalllink.SubClassWindow(GetDlgItem(hWnd,IDC_LEARNMORE));
g_SettingsScheduledInstalllink.SetHyperLink(gtszAUSchedInstallUrl);
g_SettingsScheduledInstalllink.Invalidate();
switch(auopt.dwOption)
{
case AUOPTION_AUTOUPDATE_DISABLE:
CheckDlgButton( hWnd, IDC_CHK_KEEPUPTODATE, BST_UNCHECKED);
CheckRadioButton(hWnd, IDC_OPTION1, IDC_OPTION3, IDC_OPTION2);
EnableOptions( hWnd, FALSE );
break;
case AUOPTION_PREDOWNLOAD_NOTIFY:
CheckDlgButton( hWnd, IDC_CHK_KEEPUPTODATE, BST_CHECKED);
CheckRadioButton(hWnd, IDC_OPTION1, IDC_OPTION3, IDC_OPTION1);
EnableOptions( hWnd, TRUE );
break;
case AUOPTION_INSTALLONLY_NOTIFY:
CheckDlgButton( hWnd, IDC_CHK_KEEPUPTODATE, BST_CHECKED);
CheckRadioButton(hWnd, IDC_OPTION1, IDC_OPTION3, IDC_OPTION2);
EnableOptions( hWnd, TRUE );
break;
case AUOPTION_SCHEDULED:
CheckDlgButton( hWnd, IDC_CHK_KEEPUPTODATE, BST_CHECKED);
CheckRadioButton(hWnd, IDC_OPTION1, IDC_OPTION3, IDC_OPTION3);
EnableOptions( hWnd, TRUE );
break;
}
// HFONT hFont = (HFONT) SendMessage(hWnd , WM_GETFONT, 0, 0);
// MYREInit(hWnd, IDC_STAT_LEARNAUTOUPDATE, hFont);
// MYREInit(hWnd, IDC_LEARNMORE, hFont);
FillDaysCombo(ghInstance, hWnd, auopt.dwSchedInstallDay, IDS_STR_EVERYDAY, IDS_STR_SATURDAY );
FillHrsCombo( hWnd, auopt.dwSchedInstallTime );
#ifndef TESTUI
EnableRestoreControls(hWnd, FHiddenItemsExist());
if (auopt.fDomainPolicy)
{
DisableUserInput(hWnd);
}
#else
EnableRestoreControls(hWnd, TRUE);
#endif
SetFocus(GetDlgItem(hWnd,IDC_OK));
return TRUE;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_OK:
if(IsDlgButtonChecked(hWnd, IDC_CHK_KEEPUPTODATE) == BST_UNCHECKED)
{
auopt.dwOption = AUOPTION_AUTOUPDATE_DISABLE;
QUITAUClient();
EndDialog(GetParent(hWnd), S_OK);
}
else if(IsDlgButtonChecked(hWnd, IDC_OPTION1) == BST_CHECKED)
{
auopt.dwOption = AUOPTION_PREDOWNLOAD_NOTIFY;
}
else if(IsDlgButtonChecked(hWnd, IDC_OPTION2) == BST_CHECKED)
{
auopt.dwOption = AUOPTION_INSTALLONLY_NOTIFY;
}
else //if(IsDlgButtonChecked(hWnd, IDC_OPTION3) == BST_CHECKED)
{
GetDayAndTimeFromUI( hWnd, &(auopt.dwSchedInstallDay), &(auopt.dwSchedInstallTime));
auopt.dwOption = AUOPTION_SCHEDULED;
EnableCombo( hWnd, TRUE );
}
#ifndef TESTUI
gInternals->m_setServiceOption(auopt);
#else
// SetServiceOption(auopt.dwOption, auopt.dwScheduledInstallDay, auopt.dwScheduledInstallTime);
#endif
EndDialog(hWnd, S_OK);
return 0;
case IDC_OPTION1:
EnableCombo( hWnd, FALSE );
CheckRadioButton(hWnd, IDC_OPTION1, IDC_OPTION3, IDC_OPTION1);
return 0;
case IDC_OPTION2:
EnableCombo( hWnd, FALSE );
CheckRadioButton(hWnd, IDC_OPTION1, IDC_OPTION3, IDC_OPTION2);
return 0;
case IDC_OPTION3:
EnableCombo( hWnd, TRUE );
CheckRadioButton(hWnd, IDC_OPTION1, IDC_OPTION3, IDC_OPTION3);
return 0;
case IDC_CHK_KEEPUPTODATE:
if( BN_CLICKED == HIWORD(wParam) )
{
OnKeepUptoDate( hWnd );
}
return 0;
case IDC_RESTOREHIDDEN:
{
extern HINSTANCE ghInstance;
INT Result = (INT)DialogBoxParam(ghInstance,
MAKEINTRESOURCE(IDD_RESTOREUPDATE),
hWnd,
(DLGPROC)_DlgRestoreProc,
(LPARAM)NULL);
if (Result == TRUE)
{
#ifndef TESTUI
if (RemoveHiddenItems())
{
EnableRestoreControls(hWnd, FALSE);
}
#else
MessageBoxW(NULL,L"Said Yes",NULL,MB_OK);
EnableRestoreControls(hWnd, FALSE);
#endif
}
}
return 0;
case IDCANCEL:
case IDC_CANCEL:
EndDialog(hWnd, S_OK);
return 0;
default:
return FALSE;
}
case WM_CLOSE:
EndDialog(hWnd, S_OK);
return FALSE;
case WM_DESTROY:
g_SettingsAutoUpdatelink.Uninit();
g_SettingsScheduledInstalllink.Uninit();
ghCurrentDialog = oldCurrentDialog;
gTopWins.Remove(hWnd);
return 0;
case WM_CTLCOLORSTATIC:
{
if (((HWND)lParam == GetDlgItem(hWnd, IDC_STAT_LEARNAUTOUPDATE)) || ((HWND)lParam == GetDlgItem(hWnd, IDC_LEARNMORE)))
return SetSettingsColors((HDC)wParam, (HWND)lParam);
}
/*
case WM_NOTIFY:
{
UINT uId = (UINT) LOWORD(wParam);
switch (uId)
{
case IDC_LEARNMORE:
case IDC_STAT_LEARNAUTOUPDATE:
if (((NMHDR FAR *) lParam)->code == EN_LINK)
{
if (((ENLINK FAR *) lParam)->msg == WM_LBUTTONDOWN)
{
LaunchLinkAction(hWnd, uId);
}
}
break;
default:
break;
}
}
return 0;*/
default:
return FALSE;
}
}