Leaked source code of windows server 2003
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.
 
 
 
 
 
 

1770 lines
49 KiB

#include "pch.h"
#include "htmlhelp.h"
#include "link.h"
#pragma hdrstop
HINSTANCE mshtml = NULL;
HACCEL ghCurrentAccel = NULL;
HHOOK ghHook = NULL;
AUOPTION gWelcomeOption;
extern UINT gNextDialogMsg;
#ifdef TESTUI
DWORD gdwScheduledInstallDay = -1;
DWORD gdwScheduledInstallTime = -1;
#endif
CSysLink g_AutoUpdatelink;
CSysLink g_ScheduledInstalllink;
CSysLink g_PrivacyStatementLink;
CSysLink g_EULA_Link(FALSE); //non html help
SHOWHTMLDIALOGFN *pfnShowHTMLDialog;
const UINT CTRLIDSTRIDMAP[][2] = {
{IDC_WELCOME_NOTE, IDS_NOTE},
{IDC_WELCOME_CONTINUE, IDS_WELCOME_CONTINUE},
{IDC_SUMMARY_NOTE, IDS_NOTE},
{IDC_WELCOME_EULA, IDS_EULA},
{IDC_LEARNMORE,IDS_LEARNMORE},
{IDC_STAT_LEARNAUTOUPDATE,IDS_LEARNMOREAUTO}
};
// A Wrapper function to first check the item handle returned from GetDlgItem for the item iIDDlgItem and then to enable or disable it depending on the flag passed
inline void GetItemAndEnableIt(HWND hWnd, int iIDDlgItem, BOOL bEnable)
{
HWND hItem = GetDlgItem(hWnd, iIDDlgItem);
if (NULL != hItem)
{
EnableWindow(hItem, bEnable);
}
}
void SetButtonText(HWND button, UINT resId)
{
TCHAR text[50];
LoadString(ghInstance, resId, text, 50);
SendMessage(button, WM_SETTEXT, 0, (LPARAM)text);
}
void ShowRTF(HWND hWnd, WPARAM wParam)
{
UINT uIndex = (UINT)wParam;
IMoniker *pIMon = NULL;
WCHAR wszArg[200];
RECT rc;
if (NULL == pfnShowHTMLDialog || uIndex >= gInternals->m_ItemList.Count())
{
return;
}
HRESULT hr;
if (FAILED(hr = CreateURLMoniker(NULL, L"res://wuauclt.exe/RTFWRAPPER.HTM", &pIMon)))
{
DEBUGMSG("WUAUCLT: ShowRTF failed to CreateURLMoniker() with error %#lx", hr);
goto done;
}
//fixcode: check return value of GetWindowRect()
GetWindowRect(hWnd, &rc);
if (FAILED(StringCchPrintfExW(wszArg, ARRAYSIZE(wszArg), NULL, NULL, MISTSAFE_STRING_FLAGS,
L"dialogHeight:%dpx;dialogWidth:%dpx;dialogTop:%d;dialogLeft:%d;help:no;resizable:yes",
rc.bottom-rc.top, rc.right-rc.left, rc.top + 25, rc.left + 25)))
{
DEBUGMSG("WUAUCLT: ShowRTF insufficient buffer for HTML dialog argument");
goto done;
}
TCHAR tszRTFLocalFile[MAX_PATH];
if (FAILED(GetRTFLocalFileName(gInternals->m_ItemList[uIndex].bstrRTFPath(), tszRTFLocalFile, ARRAYSIZE(tszRTFLocalFile), GetSystemDefaultLangID())))
{
goto done;
}
DEBUGMSG("Launching RTF page from %S", T2W(tszRTFLocalFile));
VARIANT varg;
varg.vt = VT_BSTR;
if (NULL == (varg.bstrVal = SysAllocString(T2W(tszRTFLocalFile))))
{
DEBUGMSG("WUAUCLT: ShowRTF failed to allocate memory for HTML dialog argument");
goto done;
}
pfnShowHTMLDialog(hWnd, pIMon, &varg, wszArg, NULL);
VariantClear(&varg);
done:
SafeRelease(pIMon);
return;
}
UINT ControlId2StringId(UINT uCtrlId)
{
for (int i = 0 ; i< ARRAYSIZE(CTRLIDSTRIDMAP); i++)
{
if (CTRLIDSTRIDMAP[i][0] == uCtrlId)
{
return CTRLIDSTRIDMAP[i][1];
}
}
return -1;
}
//////////////////////////////////////////////////////////////////
// Adjust (Stretch or squeeze) the bitmap IDB_SIDEBAR to
// make it fit into the control IDC_SIDEBAR
// to fit in the dialog
// hDlg : handle to the dialog
///////////////////////////////////////////////////////////////////
void AdjustSideBar(HWND hDlg)
{
HBITMAP hBmp;
BITMAP bmp;
HDC hDC;
HDC hMemDC;
RECT rc ;
RECT rcWhiteRect, rcBottomLine;
GetWindowRect(GetDlgItem(hDlg, IDC_BOTTOMLINE), &rcBottomLine);
GetWindowRect(GetDlgItem(hDlg, IDC_WHITERECT), &rcWhiteRect);
MapWindowPoints(NULL, hDlg, (LPPOINT)&rcBottomLine, 2);
MapWindowPoints(NULL, hDlg, (LPPOINT)&rcWhiteRect, 2);
rc.right = rcWhiteRect.left;
rc.bottom = rcBottomLine.top -1;
hDC = GetDC(hDlg);
hMemDC = CreateCompatibleDC(hDC);
hBmp = (HBITMAP) LoadImage(ghInstance, MAKEINTRESOURCE(IDB_SIDEBAR), IMAGE_BITMAP,
0, 0, LR_DEFAULTSIZE | LR_CREATEDIBSECTION);
GetObject(hBmp, sizeof(bmp), &bmp);
SelectObject(hMemDC, hBmp);
SetStretchBltMode( hDC, COLORONCOLOR );
StretchBlt(hDC, 0, 0, rc.right, rc.bottom, hMemDC, 0, 0, bmp.bmWidth, bmp.bmHeight, MERGECOPY);
DeleteObject(hBmp);
DeleteDC(hMemDC);
ReleaseDC(hDlg, hDC);
}
void SetAUDialogIcon(HWND hDlg, HANDLE hIcon, HANDLE hSmIcon)
{
SendMessage(hDlg, WM_SETICON, ICON_BIG, (LPARAM)hIcon);
SendMessage(hDlg, WM_SETICON, ICON_SMALL, (LPARAM)hSmIcon);
}
int DisplayWizardCancelWarning(HWND hWnd)
{
TCHAR title[80], text[300];
LoadString(ghInstance, IDS_CLOSEWARNINGTITLE, title, ARRAYSIZE(title));
LoadString(ghInstance, IDS_CLOSEWARNINGTEXT, text, ARRAYSIZE(text));
return MessageBox(hWnd, text, title, MB_YESNO | MB_ICONQUESTION);
}
void LaunchHelp(
HWND hwnd,
LPCTSTR szURL
)
{
HtmlHelp(NULL,szURL,HH_DISPLAY_TOPIC,NULL);
}
LONG SetColors(HDC hdc, HWND control)
{
int id = GetDlgCtrlID(control);
switch (id)
{
case IDC_WHITERECT:
{
SetBkMode(hdc, OPAQUE);
SetBkColor(hdc, GetSysColor(COLOR_WINDOW));
return PtrToLong(GetSysColorBrush(COLOR_WINDOW));
}
case IDC_CHK_KEEPUPTODATE:
{
//DEBUGMSG("IDC_LEARNMORE Setcolors");
/*
SetBkMode(hdc, TRANSPARENT);
return PtrToLong(GetSysColorBrush(COLOR_BTNFACE));
*/
return FALSE;
}
case IDC_OPTION1:
case IDC_OPTION2:
case IDC_OPTION3:
{
return FALSE;
}
case IDC_GRPBOX:
return FALSE;
default:
{
SetTextColor(hdc, GetSysColor(COLOR_WINDOWTEXT));
SetBkMode(hdc, TRANSPARENT);
return PtrToLong(GetStockObject(HOLLOW_BRUSH));
}
}
}
LRESULT CALLBACK AUTranslatorProc(int code, WPARAM wParam, LPARAM lParam)
{
if(code != MSGF_DIALOGBOX
|| ghCurrentAccel == NULL
|| !TranslateAccelerator(ghCurrentDialog, ghCurrentAccel, (MSG*)lParam))
{
return CallNextHookEx(ghHook, code, wParam, lParam);
}
else
{
return 1;
}
}
INT_PTR CALLBACK WizardFrameProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
ghCurrentMainDlg = hWnd;
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_WELCOME),
hWnd, WelcomeDlgProc);
SetActiveWindow(ghCurrentMainDlg);
SetForegroundWindow(ghCurrentMainDlg);
SetAUDialogIcon(hWnd, ghAppIcon, ghAppSmIcon); //set icon for all AU dialogs
gWelcomeOption.dwOption = -1;
gWelcomeOption.dwSchedInstallDay = -1;
gWelcomeOption.dwSchedInstallTime = -1;
return TRUE;
case WM_COMMAND:
if(ghCurrentDialog != NULL)
{
PostMessage(ghCurrentDialog, WM_COMMAND, wParam, lParam);
}
return 0;
case WM_DESTROY:
ghCurrentMainDlg = NULL;
return 0;
case WM_HELP:
LaunchHelp(hWnd, gtszAUOverviewUrl);
return TRUE;
default:
return FALSE;
}
}
void LaunchEula()
{
TCHAR szCmd[MAX_PATH+1];
STARTUPINFO StartupInfo;
PROCESS_INFORMATION ProcessInfo;
TCHAR szEULA_TXT[] = _T(" eula.txt"); // command line string
UINT ulen =GetSystemDirectory(szCmd, ARRAYSIZE(szCmd));
if ( 0 == ulen ||
ulen >= ARRAYSIZE(szCmd) ||
FAILED(StringCchCatEx(szCmd, ARRAYSIZE(szCmd), _T("\\notepad.exe"), NULL, NULL, MISTSAFE_STRING_FLAGS)))
{
return;
}
ZeroMemory(&ProcessInfo, sizeof(ProcessInfo));
ZeroMemory(&StartupInfo, sizeof(StartupInfo));
StartupInfo.cb = sizeof(StartupInfo);
StartupInfo.wShowWindow = SW_SHOW;
CreateProcess(
szCmd, // name of executable module
szEULA_TXT, // command line string
NULL, // SD
NULL, // SD
FALSE, // handle inheritance option
DETACHED_PROCESS, // creation flags
NULL, // new environment block
NULL, // current directory name
&StartupInfo, // startup information
&ProcessInfo // process information
);
SafeCloseHandleNULL(ProcessInfo.hThread);
SafeCloseHandleNULL(ProcessInfo.hProcess);
}
void LaunchLinkAction(HWND hwnd, UINT uCtrlId)
{
//#ifdef _CWU
#if 0
OSVERSIONINFO OsVer;
OsVer.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
GetVersionEx( &OsVer );
#endif
//#endif
switch (uCtrlId)
{
case IDC_WELCOME_EULA:
LaunchEula();
break;
// case IDC_WELCOME_PRIVACY:
/*#ifndef _CWU
ShellExecute(NULL, NULL, gtszPrivacyUrl, NULL, NULL, SW_SHOWNORMAL);
#else
*/
// {
// LaunchHelp(hwnd, (LPTSTR)gtszW2KPrivacyUrl);
/* if( (OsVer.dwMajorVersion == 5) && (OsVer.dwMinorVersion == 0))
{
// NT5
LaunchHelp(hwnd, (LPTSTR)gtszW2KPrivacyUrl);
}
else if( (OsVer.dwMajorVersion == 5) && (OsVer.dwMinorVersion == 1))
{
// Whistler
ShellExecute(NULL, NULL, gtszPrivacyUrl, NULL, NULL, SW_SHOWNORMAL);
}
*/
// }
//#endif
break;
case IDC_LEARNMORE:
/*#ifndef _CWU
ShellExecute(NULL, NULL, gtszLearnMoreUrl, NULL, NULL, SW_SHOWNORMAL);
#else
*/
{
LaunchHelp(hwnd, gtszAUSchedInstallUrl);
/* if( (OsVer.dwMajorVersion == 5) && (OsVer.dwMinorVersion == 0))
{
// NT5
LaunchHelp(hwnd, (LPTSTR)gtszAUW2kSchedInstallUrl);
}
else if( (OsVer.dwMajorVersion == 5) && (OsVer.dwMinorVersion == 1))
{
// Whistler
LaunchHelp(hwnd, (LPTSTR)gtszAUXPSchedInstallUrl);
}
*/
}
break;
//#endif
//#ifdef _CWU
case IDC_STAT_LEARNAUTOUPDATE:
{
LaunchHelp(hwnd, gtszAUOverviewUrl);
/*
if( (OsVer.dwMajorVersion == 5) && (OsVer.dwMinorVersion == 0))
{
// NT5
LaunchHelp(hwnd, (LPTSTR)gtszAUOverviewUrl);
}
else if( (OsVer.dwMajorVersion == 5) && (OsVer.dwMinorVersion == 1))
{
// Whistler
ShellExecute(NULL, NULL, gtszLearnMoreUrl, NULL, NULL, SW_SHOWNORMAL);
}
*/
}
break;
//#endif
}
return;
}
void SetDefaultCF(HWND hWndMYRE, CHARFORMAT2 *pcfDefault)
{
pcfDefault->cbSize = sizeof(*pcfDefault);
SendMessage(hWndMYRE, EM_GETCHARFORMAT, 0, (LPARAM)pcfDefault);
pcfDefault->dwMask |= CFM_BOLD | CFM_HIDDEN | CFM_ITALIC | CFM_LINK
| CFM_UNDERLINE | CFM_SIZE | CFM_WEIGHT | CFM_COLOR;
pcfDefault->dwEffects &= ~(CFE_BOLD | CFE_ITALIC |CFE_LINK | CFE_UNDERLINE | CFE_HIDDEN);
SendMessage(hWndMYRE, EM_SETCHARFORMAT, 0, (LPARAM)pcfDefault);
}
/*
void DbgDumpEffects(CHARFORMAT2 cf)
{
UINT effects[] = {
CFE_BOLD,
CFE_ITALIC,
CFE_LINK,
CFE_UNDERLINE
};
LPTSTR msgs[]= {
_T("BOLD"),
_T("ITALIC"),
_T("LINK"),
_T("UNDERLINE")
};
const UINT NUM_EFFECTS = 4;
for (int i = 0; i < NUM_EFFECTS; i++)
{
if (cf.dwEffects & effects[i] )
{
DEBUGMSG("cf is %S", msgs[i]);
}
else
{
DEBUGMSG("cf is NOT %S", msgs[i]);
}
}
}
*/
/////////////////////////////////////////////////////////////
// Format specified text in a rich edit control
// e.g. make it bold, italic, link etc
// hWndMYRE : Rich edit window handle
// uStrId : string id for the text to format
// puEffects : points to the flag specifying designed effects. e.g.
// : CFE_BOLD
// : CFE_ITALIC
// : CFE_UNDERLINE
// : if NULL, effects not changed
void FormatMYREText(HWND hWndMYRE, UINT uStrId, UINT* puEffects)
{
FINDTEXTEXW ft;
CHARRANGE cr;
CHARFORMAT2 cf;
INT nFTflags ;
ZeroMemory(&ft, sizeof(ft));
ZeroMemory(&cr, sizeof(cr));
ZeroMemory(&cf, sizeof(cf));
// DEBUGMSG("FormatMYREText() effects = 0x%x color = 0x%x", puEffects, ptxtColor);
cf.cbSize = sizeof(cf);
ft.chrg.cpMin = 0;
ft.chrg.cpMax = -1;
ft.lpstrText = ResStrFromId(uStrId);
nFTflags = FR_MATCHCASE|FR_WHOLEWORD|FR_DOWN;
cr.cpMin = (LONG)SendMessage(hWndMYRE, EM_FINDTEXTEXW, nFTflags, (LPARAM) &ft);
if (-1 == cr.cpMin )
{
DEBUGMSG("Format Text %S not found %lu", ft.lpstrText, GetLastError());
return;
}
cr = ft.chrgText;
SendMessage(hWndMYRE, EM_EXSETSEL, 0, (LPARAM)&cr);
SendMessage(hWndMYRE, EM_GETCHARFORMAT, 1, (LPARAM)&cf);
if (0 != puEffects)
{
cf.dwEffects |= *puEffects;
}
SendMessage(hWndMYRE, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
}
/////////////////////////////////////////////////////////////////
// Subclass rich edit control and format its text
// hDlg : the dialog the rich edit control is in
// uId : id of the rich edit control
// hFont: font to set richedit control
/////////////////////////////////////////////////////////////////
void MYREInit(HWND hDlg, UINT uId, HFONT hFont)
{
CHARFORMAT2 cfDefault;
HWND hWndMYRE = GetDlgItem(hDlg, uId);
UINT uStrId = 0;
UINT uEffects = 0;
SetDefaultCF(hWndMYRE, &cfDefault);
//DEBUGMSG("MYREInit() retrieving and removing text");
UINT uTextLen = (LONG)SendMessage(hWndMYRE, WM_GETTEXTLENGTH, 0, 0);
TCHAR *pText = (TCHAR*)malloc((uTextLen + 1)* sizeof(TCHAR));
if (NULL != pText)
{
/* need to blank out text and reset text for new font to go into effect*/
SendMessage(hWndMYRE, WM_GETTEXT, (WPARAM)(uTextLen+1), (LPARAM)pText);
//DEBUGMSG("MYREInit() get text %S", pText);
SendMessage(hWndMYRE, WM_SETTEXT, 0, (LPARAM)L"");
//DEBUGMSG("MYREInit() removed text");
LRESULT lres = SendMessage(hWndMYRE, EM_GETLANGOPTIONS, 0, 0);
lres &= ~IMF_AUTOFONT; // turn off autofont
SendMessage(hWndMYRE, EM_SETLANGOPTIONS, 0, (LPARAM)lres);
//DEBUGMSG("MYREInit() turn off auto font");
SendMessage(hWndMYRE, WM_SETFONT, (WPARAM)hFont, TRUE);
//DEBUGMSG("MYREInit() setting font to %#lx", hFont);
SendMessage(hWndMYRE, WM_SETTEXT, 0, (LPARAM)pText);
//DEBUGMSG("MYREInit() reset text");
free(pText);
}
switch (uId)
{
case IDC_WELCOME_NOTE:
case IDC_SUMMARY_NOTE:
case IDC_WELCOME_CONTINUE:
{
uStrId = ControlId2StringId(uId);
uEffects = CFE_BOLD;
break;
}
//#ifdef _CWU
case IDC_WELCOME_EULA:
case IDC_WELCOME_PRIVACY:
case IDC_LEARNMORE:
case IDC_STAT_LEARNAUTOUPDATE:
uStrId = ControlId2StringId(uId);
uEffects = CFE_LINK;
SendMessage(hWndMYRE, EM_SETEVENTMASK, 0, ENM_LINK);
break;
//#endif
}
if (0 != uStrId)
{
FormatMYREText(hWndMYRE, uStrId, &uEffects);
}
return;
}
void CancelWizard(HWND hWnd)
{
static BOOL s_fCancelWarningShown = FALSE;
if (!s_fCancelWarningShown)
{
s_fCancelWarningShown = TRUE;
if (IDYES == DisplayWizardCancelWarning(hWnd))
{
#if 0
#ifndef TESTUI
SetTomorrowReminder(AUSTATE_NOT_CONFIGURED);
#endif
#endif
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_SETUPCANCEL),
GetParent(hWnd), SetupCancelDlgProc);
DestroyWindow(hWnd);
}
s_fCancelWarningShown = FALSE;
}
}
INT_PTR CALLBACK WelcomeDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static BOOL s_fHasFocusLastTime ;
switch(message)
{
case WM_INITDIALOG:
{
HWND hHeader = GetDlgItem(hWnd, IDC_HEADER);
ghCurrentDialog = hWnd;
s_fHasFocusLastTime = FALSE;
SendMessage(hHeader, WM_SETFONT, (WPARAM)ghHeaderFont, 0);
SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);
GetItemAndEnableIt(hWnd, IDC_BACK, FALSE);
SetFocus(GetDlgItem(hWnd, IDC_NEXT));
HFONT hFont = (HFONT) SendMessage(hWnd , WM_GETFONT, 0, 0);
MYREInit(hWnd, IDC_WELCOME_NOTE, hFont);
MYREInit(hWnd, IDC_WELCOME_CONTINUE, hFont);
//#ifdef _CWU
// MYREInit(hWnd, IDC_WELCOME_EULA, hFont);
// MYREInit(hWnd, IDC_WELCOME_PRIVACY, hFont);
//#endif
g_PrivacyStatementLink.SetSysLinkInstanceHandle(ghInstance);
g_PrivacyStatementLink.SubClassWindow(GetDlgItem(hWnd,IDC_WELCOME_PRIVACY));
g_PrivacyStatementLink.SetHyperLink(gtszAUPrivacyUrl);
g_PrivacyStatementLink.Invalidate();
g_EULA_Link.SetSysLinkInstanceHandle(ghInstance);
g_EULA_Link.SubClassWindow(GetDlgItem(hWnd,IDC_WELCOME_EULA));
g_EULA_Link.SetHyperLink(_T("eula.txt"));
g_EULA_Link.Invalidate();
return TRUE;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
case IDC_NEXT:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_NOTOPTIONS),
GetParent(hWnd), NotificationOptionsDlgProc);
DestroyWindow(hWnd);
return 0;
case IDCANCEL:
case IDC_CANCEL:
CancelWizard(hWnd);
return 0;
default:
return 0;
}
case WM_CTLCOLORSTATIC:
return SetColors((HDC)wParam, (HWND)lParam);
case WM_SETCURSOR:
{
if (LOWORD(lParam) == HTCLIENT && HIWORD(lParam) == WM_MOUSEMOVE)
{
SetCursor(ghCursorNormal);
}
return TRUE;
}
case WM_DRAWITEM:
{
AdjustSideBar(hWnd);
return TRUE;
}
case WM_NOTIFY:
{
UINT uId = (UINT) LOWORD(wParam);
/*#ifndef _CWU
LPNMHDR pNMHdr = (LPNMHDR) lParam;
switch (uId)
{
case IDC_WELCOME_PRIVACY:
case IDC_WELCOME_EULA:
switch (pNMHdr->code)
{
case NM_RETURN:
case NM_CLICK:
{
LaunchLinkAction(uId);
}
break;
default:
break;
}
default:
break;
}
#else
*/
switch (uId)
{
// case IDC_WELCOME_PRIVACY:
case IDC_WELCOME_EULA:
if (((NMHDR FAR *) lParam)->code == EN_LINK)
{
if (((ENLINK FAR *) lParam)->msg == WM_LBUTTONDOWN)
{
LaunchLinkAction(hWnd, uId);
}
}
break;
default:
break;
}
//#endif
return 0;
}
case WM_DESTROY:
g_EULA_Link.Uninit();
g_PrivacyStatementLink.Uninit();
return 0;
default:
{
return FALSE;
}
}
}
WNDPROC editProc;
#ifdef TESTUI
const TCHAR REG_AUOPTIONS[] = _T("AUOptions"); //REG_DWORD
const TCHAR REG_AUSCHEDINSTALLDAY[] = _T("ScheduledInstallDay"); // REG_DWORD
const TCHAR REG_AUSCHEDINSTALLTIME[] = _T("ScheduledInstallTime"); // REG_DWORD
void GetServiceOption(
LPDWORD lpdwOption,
LPDWORD lpdwDay,
LPDWORD lpdwTime
)
{
DWORD dwResult = AUOPTION_INSTALLONLY_NOTIFY;
GetRegDWordValue(REG_AUOPTIONS, &dwResult);
if ((dwResult < AUOPTION_ADMIN_MIN) || (dwResult > AUOPTION_MAX))
{
DEBUGMSG("WUAUENG Invalid option in registry, returning installonly");
dwResult = AUOPTION_INSTALLONLY_NOTIFY;
}
*lpdwOption = dwResult;
dwResult = 0;
GetRegDWordValue(REG_AUSCHEDINSTALLDAY, &dwResult);
if( (dwResult <= 0) || (dwResult > 7))
{
dwResult = 0;
}
*lpdwDay = dwResult;
gdwScheduledInstallDay = dwResult;
dwResult = 0;
GetRegDWordValue(REG_AUSCHEDINSTALLTIME, &dwResult);
if( (dwResult <= 0) || (dwResult > 23))
{
dwResult = 3;
}
*lpdwTime = dwResult;
gdwScheduledInstallTime = dwResult;
}
void SetServiceOption(
DWORD dwOption,
DWORD dwDay,
DWORD dwTime
)
{
SetRegDWordValue( REG_AUOPTIONS, dwOption);
SetRegDWordValue( REG_AUSCHEDINSTALLDAY, dwDay);
SetRegDWordValue( REG_AUSCHEDINSTALLTIME, dwTime);
}
#endif
BOOL EnableCombo(HWND hwnd, BOOL bState)
{
GetItemAndEnableIt(hwnd,IDC_CMB_DAYS,bState);
GetItemAndEnableIt(hwnd,IDC_CMB_HOURS,bState);
// GetItemAndEnableIt(hwnd,IDC_LEARNMORE,bState); //Enable/disable the learn about schedule install
//link along with the combo boxes.
return TRUE;
}
BOOL EnableOptions(HWND hwnd, BOOL bState)
{
GetItemAndEnableIt(hwnd,IDC_OPTION1,bState);
GetItemAndEnableIt(hwnd,IDC_OPTION2,bState);
GetItemAndEnableIt(hwnd,IDC_OPTION3,bState);
if (BST_CHECKED == SendMessage(GetDlgItem(hwnd,IDC_OPTION3),BM_GETCHECK,0,0))
{
EnableCombo(hwnd, bState);
}
return TRUE;
}
void OnKeepUptoDate(HWND hwnd)
{
LRESULT lResult = SendMessage(GetDlgItem(hwnd,IDC_CHK_KEEPUPTODATE),BM_GETCHECK,0,0);
if (lResult == BST_CHECKED)
{
EnableOptions(hwnd, TRUE);
}
else if (lResult == BST_UNCHECKED)
{
EnableOptions(hwnd, FALSE);
EnableCombo(hwnd, FALSE);
}
}
void GetDayAndTimeFromUI(
HWND hWnd,
LPDWORD lpdwDay,
LPDWORD lpdwTime
)
{
HWND hComboDays = GetDlgItem(hWnd,IDC_CMB_DAYS);
HWND hComboHrs = GetDlgItem(hWnd,IDC_CMB_HOURS);
LRESULT nDayIndex = SendMessage(hComboDays,CB_GETCURSEL,0,(LPARAM)0);
LRESULT nTimeIndex = SendMessage(hComboHrs,CB_GETCURSEL,0,(LPARAM)0);
*lpdwDay = (DWORD)SendMessage(hComboDays,CB_GETITEMDATA, nDayIndex, (LPARAM)0);
*lpdwTime = (DWORD)SendMessage(hComboHrs,CB_GETITEMDATA, nTimeIndex, (LPARAM)0);
}
INT_PTR CALLBACK NotificationOptionsDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
{
ghCurrentDialog = hWnd;
EnableCombo(hWnd, FALSE); //Initially disabled
HWND hHeader = GetDlgItem(hWnd, IDC_HEADER);
SendMessage(hHeader, WM_SETFONT, (WPARAM)ghHeaderFont, 0);
if(-1 == gWelcomeOption.dwOption)
{
#ifndef TESTUI
gInternals->m_getServiceOption(&gWelcomeOption);
#else
GetServiceOption(&(gWelcomeOption.dwOption), &(gWelcomeOption.dwSchedInstallDay), &(gWelcomeOption.dwSchedInstallTime));
#endif
}
g_AutoUpdatelink.SetSysLinkInstanceHandle(ghInstance);
g_AutoUpdatelink.SubClassWindow(GetDlgItem(hWnd,IDC_STAT_LEARNAUTOUPDATE));
g_AutoUpdatelink.SetHyperLink(gtszAUOverviewUrl);
g_AutoUpdatelink.Invalidate();
g_ScheduledInstalllink.SetSysLinkInstanceHandle(ghInstance);
g_ScheduledInstalllink.SubClassWindow(GetDlgItem(hWnd,IDC_LEARNMORE));
g_ScheduledInstalllink.SetHyperLink(gtszAUSchedInstallUrl);
g_ScheduledInstalllink.Invalidate();
switch(gWelcomeOption.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;
}
SetFocus(GetDlgItem(hWnd, IDC_NEXT));
SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);
HFONT hFont = (HFONT) SendMessage(hWnd , WM_GETFONT, 0, 0);
MYREInit(hWnd, IDC_STAT_LEARNAUTOUPDATE, hFont);
MYREInit(hWnd, IDC_LEARNMORE, hFont);
FillDaysCombo(ghInstance, hWnd, gWelcomeOption.dwSchedInstallDay, IDS_STR_EVERYDAY, IDS_STR_SATURDAY );
FillHrsCombo( hWnd, gWelcomeOption.dwSchedInstallTime );
if (gWelcomeOption.fDomainPolicy)
{
DisableUserInput(hWnd);
}
return TRUE;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
case IDC_NEXT:
//#ifndef _CWU
#if 0
if(IsDlgButtonChecked(hWnd, IDC_OPTION1) == BST_CHECKED)
{
gdwWelcomeOption = AUOPTION_INSTALLONLY_NOTIFY;
}
else if(IsDlgButtonChecked(hWnd, IDC_OPTION2) == BST_CHECKED)
{
gdwWelcomeOption = AUOPTION_PREDOWNLOAD_NOTIFY;
}
else if(IsDlgButtonChecked(hWnd, IDC_OPTION3) == BST_CHECKED)
{
gdwWelcomeOption = AUOPTION_AUTOUPDATE_DISABLE;
}
#endif
//#else
if(IsDlgButtonChecked(hWnd, IDC_CHK_KEEPUPTODATE) == BST_UNCHECKED)
{
gWelcomeOption.dwOption = AUOPTION_AUTOUPDATE_DISABLE;
}
else if(IsDlgButtonChecked(hWnd, IDC_OPTION1) == BST_CHECKED)
{
gWelcomeOption.dwOption = AUOPTION_PREDOWNLOAD_NOTIFY;
}
else if(IsDlgButtonChecked(hWnd, IDC_OPTION2) == BST_CHECKED)
{
gWelcomeOption.dwOption = AUOPTION_INSTALLONLY_NOTIFY;
}
else if(IsDlgButtonChecked(hWnd, IDC_OPTION3) == BST_CHECKED)
{
gWelcomeOption.dwOption = AUOPTION_SCHEDULED;
EnableCombo( hWnd, TRUE );
GetDayAndTimeFromUI( hWnd, &(gWelcomeOption.dwSchedInstallDay), &(gWelcomeOption.dwSchedInstallTime));
}
//#endif
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_SETUPCOMPLETE),
GetParent(hWnd), SetupCompleteDlgProc);
DestroyWindow(hWnd);
return 0;
case IDC_BACK:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_WELCOME),
GetParent(hWnd), WelcomeDlgProc);
DestroyWindow(hWnd);
return 0;
case IDCANCEL:
case IDC_CANCEL:
CancelWizard(hWnd);
return 0;
//#ifndef _CWU
#if 0
case IDC_OPTION1:
gdwWelcomeOption = AUOPTION_INSTALLONLY_NOTIFY;
CheckRadioButton(hWnd, IDC_OPTION1, IDC_OPTION3, IDC_OPTION1);
return 0;
case IDC_OPTION2:
gdwWelcomeOption = AUOPTION_PREDOWNLOAD_NOTIFY;
CheckRadioButton(hWnd, IDC_OPTION1, IDC_OPTION3, IDC_OPTION2);
return 0;
case IDC_OPTION3:
gdwWelcomeOption = AUOPTION_AUTOUPDATE_DISABLE;
CheckRadioButton(hWnd, IDC_OPTION1, IDC_OPTION3, IDC_OPTION3);
return 0;
#endif
//#else
case IDC_OPTION1:
gWelcomeOption.dwOption = AUOPTION_PREDOWNLOAD_NOTIFY;
EnableCombo( hWnd, FALSE );
CheckRadioButton(hWnd, IDC_OPTION1, IDC_OPTION3, IDC_OPTION1);
return 0;
case IDC_OPTION2:
gWelcomeOption.dwOption = AUOPTION_INSTALLONLY_NOTIFY;
EnableCombo( hWnd, FALSE );
CheckRadioButton(hWnd, IDC_OPTION1, IDC_OPTION3, IDC_OPTION2);
return 0;
case IDC_OPTION3:
gWelcomeOption.dwOption = AUOPTION_SCHEDULED;
EnableCombo( hWnd, TRUE );
//GetDayAndTimeFromUI( hWnd, &(gWelcomeOption.dwSchedInstallDay), &(gWelcomeOption.dwSchedInstallTime));
CheckRadioButton(hWnd, IDC_OPTION1, IDC_OPTION3, IDC_OPTION3);
return 0;
case IDC_CHK_KEEPUPTODATE:
if( BN_CLICKED == HIWORD(wParam) )
{
OnKeepUptoDate( hWnd );
}
return 0;
//#endif
default:
return 0;
}
case WM_NOTIFY:
//#ifndef _CWU
#if 0
{
UINT uId = (UINT) wParam;
LPNMHDR pNMHdr = (LPNMHDR) lParam;
if (IDC_LEARNMORE == uId && (NM_RETURN == pNMHdr->code || NM_CLICK == pNMHdr->code))
{
LaunchLinkAction(hWnd, uId);
}
return 0;
}
#endif
//#else
{
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;
//#endif
case WM_SETCURSOR:
{
if (LOWORD(lParam) == HTCLIENT && HIWORD(lParam) == WM_MOUSEMOVE)
{
SetCursor(ghCursorNormal);
}
return TRUE;
}
case WM_CTLCOLORSTATIC:
{
return SetColors((HDC)wParam, (HWND)lParam);
}
case WM_DESTROY:
g_ScheduledInstalllink.Uninit();
g_AutoUpdatelink.Uninit();
return 0;
default:
return FALSE;
}
}
INT_PTR CALLBACK SetupCompleteDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
{
ghCurrentDialog = hWnd;
HWND hHeader = GetDlgItem(hWnd, IDC_HEADER);
SendMessage(hHeader, WM_SETFONT, (WPARAM)ghHeaderFont, 0);
SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);
GetItemAndEnableIt(hWnd, IDC_BACK, TRUE);
GetItemAndEnableIt(hWnd, IDC_CANCEL, TRUE);
SetFocus(GetDlgItem(hWnd, IDC_FINISH));
return TRUE;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_BACK:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_NOTOPTIONS),
GetParent(hWnd), NotificationOptionsDlgProc);
DestroyWindow(hWnd);
return 0;
case IDCANCEL:
case IDC_CANCEL:
CancelWizard(hWnd);
return 0;
case IDOK:
case IDC_FINISH:
EndDialog(GetParent(hWnd), S_OK);
DestroyWindow(hWnd);
#ifdef TESTUI
SetServiceOption(gWelcomeOption.dwOption, gWelcomeOption.dwSchedInstallDay, gWelcomeOption.dwSchedInstallTime);
PostMessage(ghMainWindow, AUMSG_SHOW_DOWNLOAD, 0, 0);
#else
gInternals->m_setServiceOption(gWelcomeOption);
gInternals->m_configureAU();
QUITAUClient();
#endif
return 0;
default:
return 0;
}
case WM_CTLCOLORSTATIC:
return SetColors((HDC)wParam, (HWND)lParam);
case WM_DRAWITEM:
AdjustSideBar(hWnd);
return TRUE;
default:
return FALSE;
}
}
void SetRemindMeLaterState(HWND hWnd)
{
#ifndef TESTUI
AUOPTION auopt;
if (SUCCEEDED(gInternals->m_getServiceOption(&auopt)))
{
GetItemAndEnableIt(hWnd, IDC_REMINDLATER,AUOPTION_SCHEDULED != auopt.dwOption);
}
#endif
}
INT_PTR CALLBACK DownloadDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
{
ghCurrentMainDlg = hWnd;
ghCurrentDialog = hWnd;
SetAUDialogIcon(hWnd, ghAppIcon, ghAppSmIcon);
HWND hHeader = GetDlgItem(hWnd, IDC_HEADER);
SendMessage(hHeader, WM_SETFONT, (WPARAM)ghHeaderFont, 0);
#ifndef TESTUI
if ( gInternals->m_ItemList.GetNumSelected() == 0)
{
SetButtonText(GetDlgItem(hWnd, IDC_OK), IDS_CLOSEBUTTONTXT);
}
#endif
SetRemindMeLaterState(hWnd);
SetActiveWindow(ghCurrentMainDlg);
SetForegroundWindow(ghCurrentMainDlg);
if(mshtml == NULL)
{
// fixcode: we already have a static ref to mshtml.
mshtml = LoadLibraryFromSystemDir(_T("MSHTML.DLL"));
pfnShowHTMLDialog = (SHOWHTMLDIALOGFN*)GetProcAddress(mshtml, "ShowHTMLDialog");
}
SetFocus(GetDlgItem(hWnd, IDC_UPDATELIST));
#ifdef DBG
DebugCheckForAutoPilot(hWnd);
#endif // DBG
return TRUE;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_OK:
{
#ifdef TESTUI
PostMessage(ghMainWindow, AUMSG_SHOW_INSTALL, 0, 0);
#else
long lSelected = gInternals->m_ItemList.GetNumSelected();
if (FAILED(gInternals->m_startDownload()) || 0 == lSelected)
{
QUITAUClient();
}
else
{
RemoveTrayIcon();
}
#endif
EndDialog(hWnd, S_OK);
return 0;
}
case IDC_REMINDLATER:
if(DialogBox(ghInstance, MAKEINTRESOURCE(IDD_REMIND),
hWnd, ReminderDlgProc) == S_OK)
{
#ifndef TESTUI
gInternals->m_setReminderState(AUSTATE_DETECT_COMPLETE);
EndDialog(hWnd, S_FALSE);
#endif
}
return 0;
case IDC_SETTINGS:
{
ShowSettingsDlg(hWnd);
SetRemindMeLaterState(hWnd);
return 0;
}
case IDCANCEL:
//CancelDialog(hWnd, AUSTATE_DETECT_COMPLETE, TRUE);
EndDialog(hWnd, S_OK);
gNextDialogMsg = AUMSG_SHOW_DOWNLOAD;
return 0;
default:
return 0;
}
case WM_CTLCOLORSTATIC:
return SetColors((HDC)wParam, (HWND)lParam);
case AUMSG_SELECTION_CHANGED:
#ifndef TESTUI
if ( gInternals->m_ItemList.GetNumSelected() == 0)
{
SetButtonText(GetDlgItem(hWnd, IDC_OK), IDS_CLOSEBUTTONTXT);
}
else
{
SetButtonText(GetDlgItem(hWnd, IDC_OK), IDS_DOWNLOADBUTTONTXT);
}
#endif
return TRUE;
case AUMSG_SHOW_RTF:
{
#ifdef TESTUI
TCHAR tszMsg[100];
(void)StringCchPrintfEx(tszMsg, ARRAYSIZE(tszMsg), NULL, NULL, MISTSAFE_STRING_FLAGS, _T("SHOW RTF for item %d"), (UINT)wParam);
MessageBox(0, tszMsg, _T("Show RTF"), 0);
#else
ShowRTF(hWnd, wParam);
#endif
return TRUE;
}
break;
case WM_DESTROY:
ghCurrentMainDlg = NULL;
return FALSE;
case WM_MOVE:
return (LONG)SendMessage(GetDlgItem(hWnd, IDC_UPDATELIST), message, wParam, lParam);
case WM_HELP:
LaunchHelp(hWnd, gtszAUOverviewUrl);
return TRUE;
default:
return FALSE;
}
}
INT_PTR CALLBACK InstallDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
SetAUDialogIcon(hWnd, ghAppIcon, ghAppSmIcon);
ghCurrentMainDlg = hWnd;
#ifdef TESTUI
ghCurrentDialog = CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_SUMMARY),
hWnd, SummaryDlgProc);
#else
if ( 0 == gInternals->m_ItemList.GetNumUnselected())
{
ghCurrentDialog = CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_SUMMARY),
hWnd, SummaryDlgProc);
}
else
{
ghCurrentDialog = CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DETAILS),
hWnd, DetailsDlgProc);
}
#endif
ShowWindow(hWnd, SW_HIDE);
SetActiveWindow(ghCurrentMainDlg);
SetForegroundWindow(ghCurrentMainDlg);
SetFocus(ghCurrentDialog);
return FALSE;
case WM_MOVE:
return (LONG)SendMessage(ghCurrentDialog, message, wParam, lParam);
break;
case WM_COMMAND:
if(ghCurrentDialog != NULL)
{
PostMessage(ghCurrentDialog, WM_COMMAND, wParam, lParam);
}
return 0;
break;
case WM_HELP:
LaunchHelp(hWnd, gtszAUOverviewUrl);
return TRUE;
case WM_DESTROY:
ghCurrentMainDlg = NULL;
ghCurrentDialog = NULL;
// QUITAUClient(); // if we are getting destroyed, install is over //QUITAUClient() where we know we need to quit
break;
default:
break;
}
return FALSE;
}
INT_PTR CALLBACK SummaryDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
static HANDLE hIcon = NULL;
switch(message)
{
case WM_INITDIALOG:
{
//DEBUGMSG("SummaryDlg Get Initialized");
ghCurrentDialog = hWnd;
HWND hHeader = GetDlgItem(hWnd, IDC_HEADER);
SendMessage(hHeader, WM_SETFONT, (WPARAM)ghHeaderFont, 0);
SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);
if (NULL == hIcon)
{
hIcon = LoadImage(ghInstance, MAKEINTRESOURCE(IDI_INFOICON), IMAGE_ICON, 16, 16, LR_LOADTRANSPARENT | LR_CREATEDIBSECTION);
}
HWND hInfoIcon = GetDlgItem(hWnd, IDC_INFOICON);
SendMessage( hInfoIcon, STM_SETIMAGE, IMAGE_ICON, (LPARAM)hIcon);
HFONT hFont = (HFONT) SendMessage(hWnd , WM_GETFONT, 0, 0);
MYREInit(hWnd, IDC_SUMMARY_NOTE, hFont);
SetRemindMeLaterState(hWnd);
SetFocus(GetDlgItem(hWnd, IDC_OK));
#ifdef DBG
DebugCheckForAutoPilot(hWnd);
#endif // DBG
return TRUE;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
case IDC_OK:
{
RemoveTrayIcon();
#ifdef TESTUI
CreateDialogParam(ghInstance, MAKEINTRESOURCE(IDD_PROGRESS),
GetParent(hWnd), ProgressDlgProc, 2);
DestroyWindow(hWnd);
#else
int num;
if ( 0 != (num = gInternals->m_ItemList.GetNumSelected() ))
{
// CreateDialogParam(ghInstance, MAKEINTRESOURCE(IDD_PROGRESS),
// GetParent(hWnd), ProgressDlgProc, gInternals->m_ItemList.GetNumSelected());
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_PROGRESS),GetParent(hWnd), ProgressDlgProc);
}
HRESULT hr;
if (FAILED(hr = gInternals->m_startInstall()) || 0 == num)
{
EndDialog(GetParent(hWnd), S_OK);
}
else
{
DestroyWindow(hWnd);
}
if (FAILED(hr))
{
QUITAUClient();
}
#endif
return 0;
}
case IDC_DETAILS:
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_DETAILS),
GetParent(hWnd), DetailsDlgProc);
DestroyWindow(hWnd);
return 0;
case IDC_REMINDLATER:
if(DialogBox(ghInstance, MAKEINTRESOURCE(IDD_REMIND),
hWnd, ReminderDlgProc) == S_OK)
{
#ifdef TESTUI
#else
gInternals->m_setReminderState(AUSTATE_DOWNLOAD_COMPLETE);
EndDialog(GetParent(hWnd), S_FALSE);
// QUITAUClient();
#endif
}
return 0;
case IDCANCEL:
//CancelDialog(hWnd, AUSTATE_DOWNLOAD_COMPLETE);
EndDialog(GetParent(hWnd), S_OK);
gNextDialogMsg = AUMSG_SHOW_INSTALL;
return 0;
default:
return 0;
}
case WM_CTLCOLORSTATIC:
return SetColors((HDC)wParam, (HWND)lParam);
case WM_DRAWITEM:
AdjustSideBar(hWnd);
return TRUE;
default:
return FALSE;
}
}
// peterwi can this and Summary dialog proc essentially be combined?
INT_PTR CALLBACK DetailsDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
{
ghCurrentDialog = hWnd;
HWND hHeader = GetDlgItem(hWnd, IDC_HEADER);
SendMessage(hHeader, WM_SETFONT, (WPARAM)ghHeaderFont, 0);
#ifndef TESTUI
if ( gInternals->m_ItemList.GetNumSelected() == 0 )
{
SetButtonText(GetDlgItem(hWnd, IDC_OK), IDS_CLOSEBUTTONTXT);
}
#endif
SetRemindMeLaterState(hWnd);
SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);
if(mshtml == NULL)
{
mshtml = LoadLibraryFromSystemDir(_T("MSHTML.DLL"));
pfnShowHTMLDialog = (SHOWHTMLDIALOGFN*)GetProcAddress(mshtml, "ShowHTMLDialog");
}
SetFocus(GetDlgItem(hWnd, IDC_OK));
return TRUE;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDC_OK:
{
#ifdef TESTUI
CreateDialogParam(ghInstance, MAKEINTRESOURCE(IDD_PROGRESS),
GetParent(hWnd), ProgressDlgProc, 2);
DestroyWindow(hWnd);
#else
RemoveTrayIcon();
//(void)gpClientCatalog->PruneInstallListAccordingToSelections();
int num;
if ( 0 != (num = gInternals->m_ItemList.GetNumSelected()) )
{
DEBUGMSG("WUAUCLT details dialog had %d items selected", num);
// CreateDialogParam(ghInstance, MAKEINTRESOURCE(IDD_PROGRESS),
// GetParent(hWnd), ProgressDlgProc, gInternals->m_ItemList.GetNumSelected());
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_PROGRESS),GetParent(hWnd), ProgressDlgProc);
}
HRESULT hr ;
if (FAILED(hr = gInternals->m_startInstall()) || 0 == num)
{
EndDialog(GetParent(hWnd), S_OK);
}
else
{
DestroyWindow(hWnd);
}
if (FAILED(hr))
{
QUITAUClient();
}
#endif
return 0;
}
case IDC_REMINDLATER:
if(DialogBox(ghInstance, MAKEINTRESOURCE(IDD_REMIND),
hWnd, ReminderDlgProc) == S_OK)
{
#ifndef TESTUI
gInternals->m_setReminderState(AUSTATE_DOWNLOAD_COMPLETE);
EndDialog(GetParent(hWnd), S_FALSE);
//QUITAUClient();
#endif
}
return 0;
case IDC_SETTINGS:
ShowSettingsDlg(hWnd);
SetRemindMeLaterState(hWnd);
return 0;
case IDCANCEL:
//CancelDialog(hWnd, AUSTATE_DETECT_COMPLETE);
EndDialog(GetParent(hWnd), S_OK);
gNextDialogMsg = AUMSG_SHOW_INSTALL;
return 0;
default:
return 0;
}
case AUMSG_SELECTION_CHANGED:
UINT uBtnTxt;
if ( gInternals->m_ItemList.GetNumSelected() == 0 )
{
uBtnTxt = IDS_CLOSEBUTTONTXT;
}
else
{
uBtnTxt = IDS_INSTALLBUTTONTXT;
}
SetButtonText(GetDlgItem(hWnd, IDC_OK), uBtnTxt);
return TRUE;
case AUMSG_SHOW_RTF:
{
#ifdef TESTUI
TCHAR tszMsg[100];
(void)StringCchPrintfEx(tszMsg, ARRAYSIZE(tszMsg), NULL, NULL, MISTSAFE_STRING_FLAGS, _T("SHOW RTF for item %d"), (UINT)wParam);
MessageBox(0, tszMsg, _T("Show RTF"), 0);
#else
ShowRTF(hWnd, wParam);
#endif
return TRUE;
}
break;
case WM_CTLCOLORSTATIC:
return SetColors((HDC)wParam, (HWND)lParam);
case WM_MOVE:
return (LONG)SendMessage(GetDlgItem(hWnd, IDC_UPDATELIST), message, wParam, lParam);
default:
return FALSE;
}
}
INT_PTR CALLBACK ProgressDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
#ifdef TESTUI
static DWORD dwProgress = 0;
#endif
switch(message)
{
case WM_INITDIALOG:
{
ghCurrentDialog = hWnd;
HWND hHeader = GetDlgItem(hWnd, IDC_HEADER);
SendMessage(hHeader, WM_SETFONT, (WPARAM)ghHeaderFont, 0);
#ifdef TESTUI
HWND hProgress = GetDlgItem(hWnd, IDC_PROGRESS);
dwProgress = 0;
SendMessage(hProgress, PBM_SETRANGE, 0, MAKELPARAM(0, 3));
SendMessage(hProgress, PBM_SETSTEP, (WPARAM) 1, 0);
SetTimer(hWnd, 1, 1000, NULL);
#else
// HWND hProgress = GetDlgItem(hWnd, IDC_PROGRESS);
// DEBUGMSG("WUAUCLT ProgressDlg total %d items to be installed ", lParam);
// SendMessage(hProgress, PBM_SETRANGE, 0, MAKELPARAM(0, lParam));
// SendMessage(hProgress, PBM_SETSTEP, (WPARAM) 1, 0);
#endif
SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);
EnableMenuItem (GetSystemMenu(GetParent(hWnd), FALSE), SC_CLOSE, MF_GRAYED);
return TRUE;
}
case WM_CTLCOLORSTATIC:
return SetColors((HDC)wParam, (HWND)lParam);
case AUMSG_INSTALL_COMPLETE:
DEBUGMSG("WUAUCLT ProgDlg gets AUMSG_INSTALL_COMPLETE");
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_COMPLETE),
GetParent(hWnd), InstallCompleteDlgProc);
DestroyWindow(hWnd);
return TRUE;
case AUMSG_REBOOT_REQUIRED:
DEBUGMSG("WUAUCLT ProgDlg gets AUMSG_REBOOT_REQUIRED");
CreateDialog(ghInstance, MAKEINTRESOURCE(IDD_RESTART),
GetParent(hWnd), RestartDlgProc);
DestroyWindow(hWnd);
return TRUE;
case AUMSG_INSTALL_PROGRESS:
{
HWND hProgress = GetDlgItem(hWnd, IDC_PROGRESS);
SendMessage(hProgress, PBM_STEPIT, 0, 0);
return TRUE;
}
case AUMSG_SET_INSTALL_ITEMSNUM:
{
HWND hProgress = GetDlgItem(hWnd, IDC_PROGRESS);
DEBUGMSG("WUAUCLT ProgressDlg total %d items to be installed ", lParam);
SendMessage(hProgress, PBM_SETRANGE, 0, MAKELPARAM(0, lParam));
SendMessage(hProgress, PBM_SETSTEP, (WPARAM) 1, 0);
}
#ifdef TESTUI
case WM_TIMER:
{
dwProgress ++;
PostMessage(hWnd, AUMSG_INSTALL_PROGRESS, 0, 0);
if (dwProgress >= 3)
{
KillTimer(hWnd, 1);
if(fCheckRebootFlag())
{
PostMessage(hWnd, AUMSG_REBOOT_REQUIRED, 0, 0);
}
else
{
PostMessage(hWnd, AUMSG_INSTALL_COMPLETE, 0, 0);
}
}
return 0;
}
#endif
default:
return FALSE;
}
}
INT_PTR CALLBACK InstallCompleteDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
{
ghCurrentDialog = hWnd;
HWND hHeader = GetDlgItem(hWnd, IDC_HEADER);
SendMessage(hHeader, WM_SETFONT, (WPARAM)ghHeaderFont, 0);
SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);
#ifdef DBG
DebugCheckForAutoPilot(hWnd);
DebugUninstallDemoPackages();
#endif // DBG
EnableMenuItem (GetSystemMenu(GetParent(hWnd), FALSE), SC_CLOSE, MF_ENABLED); //reset system menu
return TRUE;
}
case WM_CTLCOLORSTATIC:
return SetColors((HDC)wParam, (HWND)lParam);
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
case IDC_OK:
case IDCANCEL:
EndDialog(GetParent(hWnd), S_OK);
QUITAUClient();
return 0;
default:
return 0;
}
case WM_DESTROY:
// ghCurrentMainDlg = NULL;
return FALSE;
case WM_DRAWITEM:
AdjustSideBar(hWnd);
return TRUE;
default:
return FALSE;
}
}
INT_PTR CALLBACK RestartDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
{
ghCurrentDialog = hWnd;
HWND hHeader = GetDlgItem(hWnd, IDC_HEADER);
SendMessage(hHeader, WM_SETFONT, (WPARAM)ghHeaderFont, 0);
SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);
SetFocus(GetDlgItem(hWnd, IDC_RESTARTNOW));
EnableMenuItem (GetSystemMenu(GetParent(hWnd), FALSE), SC_CLOSE, MF_ENABLED); //reset system menu
return TRUE;
}
case WM_CTLCOLORSTATIC:
return SetColors((HDC)wParam, (HWND)lParam);
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
case IDC_RESTARTNOW:
SetClientExitCode(CDWWUAUCLT_REBOOTNOW);
EndDialog(GetParent(hWnd),S_OK);
QUITAUClient();
return 0;
case IDCANCEL:
case IDC_RESTARTLATER:
//DestroyWindow(hWnd);
EndDialog(GetParent(hWnd), S_OK);
SetClientExitCode(CDWWUAUCLT_REBOOTLATER);
QUITAUClient();
return 0;
default:
return 0;
}
case WM_DRAWITEM:
AdjustSideBar(hWnd);
return TRUE;
default:
return FALSE;
}
}
INT_PTR CALLBACK SetupCancelDlgProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch(message)
{
case WM_INITDIALOG:
{
ghCurrentDialog = hWnd;
HWND hHeader = GetDlgItem(hWnd, IDC_HEADER);
SendMessage(hHeader, WM_SETFONT, (WPARAM)ghHeaderFont, 0);
SetWindowPos(hWnd, HWND_TOP, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOSIZE);
GetItemAndEnableIt(hWnd, IDC_BACK, FALSE);
GetItemAndEnableIt(hWnd, IDC_CANCEL, FALSE);
SetFocus(GetDlgItem(hWnd, IDC_FINISH));
return TRUE;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
case IDOK:
case IDCANCEL:
case IDC_FINISH:
{
// bug 493734
// Remove the dialog (frame) but keep the icon.
EndDialog(GetParent(hWnd), S_OK);
gNextDialogMsg = AUMSG_SHOW_WELCOME;
// QUITAUClient();
// RemoveTrayIcon();
return 0;
}
default:
return 0;
}
case WM_CTLCOLORSTATIC:
return SetColors((HDC)wParam, (HWND)lParam);
case WM_DRAWITEM:
AdjustSideBar(hWnd);
return TRUE;
default:
return FALSE;
}
}