Source code of Windows XP (NT5)
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.
 
 
 
 
 
 

504 lines
11 KiB

//+------------------------------------------------------------------
//
// Project: Windows NT4 DS Client Setup Wizard
//
// Purpose: Installs the Windows NT4 DS Client Files
//
// File: wizard.cpp
//
// History: March 1998 Zeyong Xu Created
// Jan 2000 Jeff Jones (JeffJon) Modified
// - changed to be an NT setup
//
//------------------------------------------------------------------
#include <windows.h>
#include <windowsx.h>
#include <prsht.h>
#include "resource.h"
#include "dscsetup.h"
#include "doinst.h"
#include "wizard.h"
extern SInstallVariables g_sInstVar;
// welcome page DlgProc of wizard
BOOL CALLBACK WelcomeDialogProc(HWND hWnd,
UINT nMessage,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturn = FALSE;
LPNMHDR lpNotifyMsg;
switch (nMessage)
{
case WM_INITDIALOG:
{
RECT rc;
// set font of title text
SetWindowFont(GetDlgItem(hWnd, IDC_STATIC_WELCOME_TITLE),
g_sInstVar.m_hBigBoldFont,
TRUE);
// Position the dialog
if (GetWindowRect(GetParent(hWnd), &rc))
{
SetWindowPos(GetParent(hWnd),
HWND_TOP,
(GetSystemMetrics(SM_CXSCREEN) / 2) -
((rc.right - rc.left) / 2),
(GetSystemMetrics(SM_CYSCREEN) / 2) -
((rc.bottom - rc.top) / 2),
rc.right - rc.left,
rc.bottom - rc.top,
SWP_NOOWNERZORDER);
}
break;
}
case WM_NOTIFY:
lpNotifyMsg = (NMHDR FAR*) lParam;
switch (lpNotifyMsg->code)
{
// user click cancel
case PSN_QUERYCANCEL:
// cancel confirm?
if(!ConfirmCancelWizard(hWnd))
{
SetWindowLongPtr(hWnd, DWL_MSGRESULT, TRUE);
bReturn = TRUE;
}
break;
case PSN_WIZNEXT:
break;
case PSN_SETACTIVE:
PropSheet_SetWizButtons(GetParent(hWnd), PSWIZB_NEXT);
break;
default:
break;
}
break;
default:
break;
}
return bReturn;
}
/* ntbug#337931: remove license page
// License page DlgProc of wizard
BOOL CALLBACK LicenseDialogProc(HWND hWnd,
UINT nMessage,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturn = FALSE;
LPNMHDR lpNotifyMsg;
HFONT hLicenseTextFont;
switch (nMessage)
{
case WM_INITDIALOG:
if(!CheckDiskSpace() || // check disk space
!LoadLicenseFile(hWnd)) // Load license file
{
g_sInstVar.m_nSetupResult = SETUP_ERROR;
PropSheet_PressButton(GetParent(hWnd), PSBTN_FINISH); // close wizard
}
// use a ANSI_FIXED_FONT (Couirer) font for EULA to replace the default
// font - MS Shell Dlg in order to fix the bug in Hebrew Win95
if(g_sInstVar.m_bWin95)
{
hLicenseTextFont = (HFONT) GetStockObject(ANSI_FIXED_FONT);
if(hLicenseTextFont)
{
SetWindowFont(GetDlgItem(hWnd, IDC_LICENSE_TEXT),
hLicenseTextFont,
TRUE);
}
}
bReturn = TRUE;
break;
case WM_NOTIFY:
lpNotifyMsg = (NMHDR FAR*) lParam;
switch (lpNotifyMsg->code)
{
// user click cancel
case PSN_QUERYCANCEL:
// cancel confirm?
if(!ConfirmCancelWizard(hWnd))
{
SetWindowLongPtr(hWnd, DWL_MSGRESULT, TRUE);
bReturn = TRUE;
}
break;
case PSN_WIZNEXT:
break;
case PSN_SETACTIVE:
{
HWND hButton;
hButton = GetDlgItem(hWnd, IDC_RADIO_ACCEPTED);
// get radio button check status
if( hButton &&
BST_CHECKED == SendMessage(hButton, BM_GETCHECK, 0, 0L) )
PropSheet_SetWizButtons(GetParent(hWnd),
PSWIZB_BACK | PSWIZB_NEXT);
else
PropSheet_SetWizButtons(GetParent(hWnd),
PSWIZB_BACK);
break;
}
default:
break;
}
break;
case WM_COMMAND: // button click
{
HWND hButton;
hButton = GetDlgItem(hWnd, IDC_RADIO_ACCEPTED);
// get radio button check status
if( hButton && BST_CHECKED ==
SendMessage(hButton, BM_GETCHECK, 0, 0L) )
PropSheet_SetWizButtons(GetParent(hWnd),
PSWIZB_BACK | PSWIZB_NEXT);
else
PropSheet_SetWizButtons(GetParent(hWnd),
PSWIZB_BACK);
}
default:
break;
}
return bReturn;
}
*/
// Confirm page DlgProc of wizard
BOOL CALLBACK ConfirmDialogProc(HWND hWnd,
UINT nMessage,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturn = FALSE;
LPNMHDR lpNotifyMsg;
switch (nMessage)
{
case WM_INITDIALOG:
if(!CheckDiskSpace()) // check disk space
{
g_sInstVar.m_nSetupResult = SETUP_ERROR;
PropSheet_PressButton(GetParent(hWnd), PSBTN_FINISH); // close wizard
}
// check if DSClient has been installed
if(CheckDSClientInstalled())
{
// load string and dispaly it in textitem
TCHAR szMessage[MAX_MESSAGE + 1];
LoadString(g_sInstVar.m_hInstance,
IDS_REINSTALL_MSG,
szMessage,
MAX_MESSAGE);
SetDlgItemText(hWnd,
IDC_STATIC_CONFIRM_INSTALL,
szMessage);
}
break;
case WM_NOTIFY:
lpNotifyMsg = (NMHDR FAR*) lParam;
switch (lpNotifyMsg->code)
{
// user click cancel
case PSN_QUERYCANCEL:
// cancel confirm?
if(!ConfirmCancelWizard(hWnd))
{
SetWindowLongPtr(hWnd, DWL_MSGRESULT, TRUE);
bReturn = TRUE;
}
break;
case PSN_WIZNEXT:
break;
case PSN_SETACTIVE:
PropSheet_SetWizButtons(GetParent(hWnd),
PSWIZB_BACK | PSWIZB_NEXT);
break;
default:
break;
}
break;
default:
break;
}
return bReturn;
}
// wizard dialog callback function
BOOL CALLBACK InstallDialogProc(HWND hWnd,
UINT nMessage,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturn = FALSE;
LPNMHDR lpMsg;
switch (nMessage)
{
case WM_INITDIALOG:
{
DWORD dwThreadId;
// get the handle of install progress bar and file name item
g_sInstVar.m_hProgress = GetDlgItem(hWnd, IDC_INSTALL_PROGRESS);
g_sInstVar.m_hFileNameItem = GetDlgItem(hWnd, IDC_STATIC_FILENAME);
// start to do installation
g_sInstVar.m_hInstallThread = CreateThread(NULL,
0,
DoInstallationProc,
hWnd,
0,
&dwThreadId);
// if CreateThread() failed
if(!g_sInstVar.m_hInstallThread)
{
g_sInstVar.m_nSetupResult = SETUP_ERROR;
PropSheet_PressButton(GetParent(hWnd), PSBTN_FINISH); // close wizard
}
bReturn = TRUE;
break;
}
case WM_NOTIFY:
{
lpMsg = (NMHDR FAR*) lParam;
switch(lpMsg->code)
{
// cancel to do nothing
case PSN_QUERYCANCEL:
// block
EnterCriticalSection(&g_sInstVar.m_oCriticalSection);
// cancel confirm?
if(!ConfirmCancelWizard(hWnd))
{
SetWindowLongPtr(hWnd, DWL_MSGRESULT, TRUE);
bReturn = TRUE;
}
// unblock
LeaveCriticalSection(&g_sInstVar.m_oCriticalSection);
break;
case PSN_WIZFINISH:
break;
case PSN_WIZBACK:
break;
case PSN_SETACTIVE:
PropSheet_SetWizButtons(GetParent(hWnd), 0);
break;
default:
break;
}
}
default:
break;
}
return bReturn;
}
// Completion page DlgProc of wizard
BOOL CALLBACK CompletionDialogProc(HWND hWnd,
UINT nMessage,
WPARAM wParam,
LPARAM lParam)
{
BOOL bReturn = FALSE;
LPNMHDR lpNotifyMsg;
switch (nMessage)
{
case WM_INITDIALOG:
{
TCHAR szMessage[MAX_MESSAGE + 1];
RECT rc;
// load string and dispaly it in textitem
switch (g_sInstVar.m_nSetupResult)
{
case SETUP_SUCCESS:
LoadString(g_sInstVar.m_hInstance,
IDS_SETUP_SUCCESS_TITLE,
szMessage,
MAX_MESSAGE);
SetDlgItemText(hWnd, IDC_STATIC_COMPLETION_TITLE, szMessage);
LoadString(g_sInstVar.m_hInstance,
IDS_SETUP_SUCCESS,
szMessage,
MAX_MESSAGE);
SetDlgItemText(hWnd, IDC_STATIC_COMPLETION, szMessage);
break;
case SETUP_CANCEL:
LoadString(g_sInstVar.m_hInstance,
IDS_SETUP_CANCEL_TITLE,
szMessage,
MAX_MESSAGE);
SetDlgItemText(hWnd, IDC_STATIC_COMPLETION_TITLE, szMessage);
LoadString(g_sInstVar.m_hInstance,
IDS_SETUP_CANCEL,
szMessage,
MAX_MESSAGE);
SetDlgItemText(hWnd, IDC_STATIC_COMPLETION, szMessage);
break;
case SETUP_ERROR:
LoadString(g_sInstVar.m_hInstance,
IDS_SETUP_ERROR_TITLE,
szMessage,
MAX_MESSAGE);
SetDlgItemText(hWnd, IDC_STATIC_COMPLETION_TITLE, szMessage);
LoadString(g_sInstVar.m_hInstance,
IDS_SETUP_ERROR,
szMessage,
MAX_MESSAGE);
SetDlgItemText(hWnd, IDC_STATIC_COMPLETION, szMessage);
break;
default:
break;
}
// set font of title text
SetWindowFont(GetDlgItem(hWnd, IDC_STATIC_COMPLETION_TITLE),
g_sInstVar.m_hBigBoldFont,
TRUE);
// Position the dialog
if (GetWindowRect(GetParent(hWnd), &rc))
{
SetWindowPos(GetParent(hWnd),
HWND_TOP,
(GetSystemMetrics(SM_CXSCREEN) / 2) -
((rc.right - rc.left) / 2),
(GetSystemMetrics(SM_CYSCREEN) / 2) -
((rc.bottom - rc.top) / 2),
rc.right - rc.left,
rc.bottom - rc.top,
SWP_NOOWNERZORDER);
}
break;
}
case WM_NOTIFY:
lpNotifyMsg = (NMHDR FAR*) lParam;
switch (lpNotifyMsg->code)
{
case PSN_QUERYCANCEL:
break;
case PSN_WIZFINISH:
break;
case PSN_SETACTIVE:
// set wizard button
PropSheet_SetWizButtons(GetParent(hWnd), PSWIZB_FINISH);
PropSheet_CancelToClose(GetParent(hWnd));
break;
default:
break;
}
break;
default:
break;
}
return bReturn;
}
// ask if you want to cancel the wizard
BOOL ConfirmCancelWizard(HWND hWnd)
{
TCHAR szMsg[MAX_MESSAGE + 1];
TCHAR szTitle[MAX_TITLE + 1];
LoadString(g_sInstVar.m_hInstance, IDS_CANCEL_TITLE, szTitle, MAX_TITLE);
LoadString(g_sInstVar.m_hInstance, IDS_CANCEL_MSG, szMsg, MAX_MESSAGE);
if (IDYES == MessageBox(hWnd,
szMsg,
szTitle,
MB_YESNO | MB_TOPMOST | MB_ICONQUESTION))
{
// kill timer
if(g_sInstVar.m_uTimerID)
KillTimer(hWnd, g_sInstVar.m_uTimerID);
// set m_nSetupResult to SETUP_CANCEL, in order to stop the inatllation
g_sInstVar.m_nSetupResult = SETUP_CANCEL;
return TRUE;
}
return FALSE;
}
// do installation proc
DWORD WINAPI DoInstallationProc(LPVOID lpVoid)
{
HWND hWnd = (HWND)lpVoid;
// do installation
g_sInstVar.m_nSetupResult = DoInstallation(hWnd);
// Close install page of the setup wizard
PropSheet_PressButton(GetParent(hWnd), PSBTN_FINISH);
return g_sInstVar.m_nSetupResult;
}