283 lines
8.1 KiB
C++
283 lines
8.1 KiB
C++
#include "pch.h"
|
|
#pragma hdrstop
|
|
#include "resource.h"
|
|
#include "wizard.h"
|
|
|
|
extern CWizard * g_pSetupWizard;
|
|
|
|
//
|
|
// Function: OnExitPageActivate
|
|
//
|
|
// Purpose: Handle the PSN_SETACTIVE notification.
|
|
//
|
|
// Parameters: hwndDlg [IN] - Handle to the exit child dialog
|
|
//
|
|
// Returns: BOOL, TRUE on success
|
|
//
|
|
BOOL OnExitPageActivate( HWND hwndDlg )
|
|
{
|
|
TraceFileFunc(ttidGuiModeSetup);
|
|
|
|
// Retrieve the CWizard instance from the dialog
|
|
CWizard * pWizard =
|
|
reinterpret_cast<CWizard *>(::GetWindowLongPtr(hwndDlg, DWLP_USER));
|
|
|
|
TraceTag(ttidWizard, "Entering exit page...");
|
|
::SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, 0);
|
|
|
|
// If we've past the point of no return do not allow the user to
|
|
// back up from this page.
|
|
if ((NULL == pWizard) || pWizard->FExitNoReturn())
|
|
{
|
|
// Note that this is failure handling. Either no networking answerfile
|
|
// section exists or there was an error in networking setup
|
|
// clean up the global object.
|
|
|
|
//
|
|
// Note: scottbri 19-Feb-1998
|
|
//
|
|
// The OC networking components need access to INetCfg but we have it locked.
|
|
// On top of this it (INetCfg) has been handed off to the LAN page which has
|
|
// cached it away. To free up INetCfg we need to delete g_pSetupWizard and
|
|
// never allow the user to backup from this page. Ideally base setup would
|
|
// call us before the OC stuff is done, but OC is implemented as pages which
|
|
// follow netsetup, even though you can't back up from them.
|
|
//
|
|
if (pWizard && !IsPostInstall(pWizard))
|
|
{
|
|
::SetWindowLongPtr(hwndDlg, DWLP_USER, 0);
|
|
Assert(pWizard == g_pSetupWizard);
|
|
delete g_pSetupWizard;
|
|
g_pSetupWizard = NULL;
|
|
}
|
|
|
|
PostMessage(GetParent(hwndDlg), PSM_PRESSBUTTON, (WPARAM)(PSBTN_NEXT), 0);
|
|
return TRUE;
|
|
}
|
|
|
|
Assert(pWizard);
|
|
PAGEDIRECTION PageDir = pWizard->GetPageDirection(IDD_Exit);
|
|
|
|
if (NWPD_FORWARD == PageDir)
|
|
{
|
|
pWizard->SetPageDirection(IDD_Exit, NWPD_BACKWARD);
|
|
if (IsPostInstall(pWizard))
|
|
{
|
|
// Exit the wizard
|
|
PropSheet_PressButton(GetParent(hwndDlg), PSBTN_FINISH);
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Note: scottbri 19-Feb-1998
|
|
//
|
|
// The OC networking components need access to INetCfg but we have it locked.
|
|
// On top of this it (INetCfg) has been handed off to the LAN page which has
|
|
// cached it away. To free up INetCfg we need to delete g_pSetupWizard and
|
|
// never allow the user to backup from this page. Ideally base setup would
|
|
// call us before the OC stuff is done, but OC is implemented as pages which
|
|
// follow netsetup, even though you can't back up from them.
|
|
//
|
|
if (!IsPostInstall(pWizard))
|
|
{
|
|
::SetWindowLongPtr(hwndDlg, DWLP_USER, 0);
|
|
Assert(pWizard == g_pSetupWizard);
|
|
delete g_pSetupWizard;
|
|
g_pSetupWizard = NULL;
|
|
}
|
|
|
|
// Goto the page after the exit page
|
|
PostMessage(GetParent(hwndDlg), PSM_PRESSBUTTON, (WPARAM)(PSBTN_NEXT), 0);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// Goto the page before the exit page
|
|
pWizard->SetPageDirection(IDD_Exit, NWPD_FORWARD);
|
|
if (IsPostInstall(pWizard))
|
|
{
|
|
// Main page
|
|
TraceTag(ttidWizard, "Exit page to Main Page...");
|
|
::SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, IDD_Main);
|
|
}
|
|
else
|
|
{
|
|
// try to get the join page
|
|
TraceTag(ttidWizard, "Exit page to Join Page...");
|
|
::SetWindowLongPtr(hwndDlg, DWLP_MSGRESULT, IDD_Join);
|
|
}
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
//
|
|
// Function: dlgprocExit
|
|
//
|
|
// Purpose: Dialog Procedure for the Exit wizard page
|
|
//
|
|
// Parameters: standard dlgproc parameters
|
|
//
|
|
// Returns: INT_PTR
|
|
//
|
|
INT_PTR CALLBACK dlgprocExit( HWND hwndDlg, UINT uMsg,
|
|
WPARAM wParam, LPARAM lParam )
|
|
{
|
|
TraceFileFunc(ttidGuiModeSetup);
|
|
|
|
BOOL frt = FALSE;
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG:
|
|
{
|
|
// Initialize our pointers to property sheet info.
|
|
PROPSHEETPAGE* psp = (PROPSHEETPAGE*)lParam;
|
|
Assert(psp->lParam);
|
|
::SetWindowLongPtr(hwndDlg, DWLP_USER, psp->lParam);
|
|
}
|
|
break;
|
|
|
|
case WM_NOTIFY:
|
|
{
|
|
LPNMHDR pnmh = (LPNMHDR)lParam;
|
|
|
|
switch (pnmh->code)
|
|
{
|
|
// propsheet notification
|
|
case PSN_HELP:
|
|
break;
|
|
|
|
case PSN_SETACTIVE:
|
|
frt = OnExitPageActivate( hwndDlg );
|
|
break;
|
|
|
|
case PSN_APPLY:
|
|
break;
|
|
|
|
case PSN_KILLACTIVE:
|
|
break;
|
|
|
|
case PSN_RESET:
|
|
break;
|
|
|
|
case PSN_WIZBACK:
|
|
break;
|
|
|
|
case PSN_WIZFINISH:
|
|
break;
|
|
|
|
case PSN_WIZNEXT:
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return( frt );
|
|
}
|
|
|
|
//
|
|
// Function: ExitPageCleanup
|
|
//
|
|
// Purpose: As a callback function to allow any page allocated memory
|
|
// to be cleaned up, after the page will no longer be accessed.
|
|
//
|
|
// Parameters: pWizard [IN] - The wizard against which the page called
|
|
// register page
|
|
// lParam [IN] - The lParam supplied in the RegisterPage call
|
|
//
|
|
// Returns: nothing
|
|
//
|
|
VOID ExitPageCleanup(CWizard *pWizard, LPARAM lParam)
|
|
{
|
|
TraceFileFunc(ttidGuiModeSetup);
|
|
|
|
}
|
|
|
|
//
|
|
// Function: CreateExitPage
|
|
//
|
|
// Purpose: To determine if the Exit page needs to be shown, and to
|
|
// to create the page if requested. Note the Exit page is
|
|
// responsible for initial installs also.
|
|
//
|
|
// Parameters: pWizard [IN] - Ptr to a Wizard instance
|
|
// pData [IN] - Context data to describe the world in
|
|
// which the Wizard will be run
|
|
// fCountOnly [IN] - If True, only the maximum number of
|
|
// pages this routine will create need
|
|
// be determined.
|
|
// pnPages [IN] - Increment by the number of pages
|
|
// to create/created
|
|
//
|
|
// Returns: HRESULT, S_OK on success
|
|
//
|
|
HRESULT HrCreateExitPage(CWizard *pWizard, PINTERNAL_SETUP_DATA pData,
|
|
BOOL fCountOnly, UINT *pnPages)
|
|
{
|
|
TraceFileFunc(ttidGuiModeSetup);
|
|
|
|
HRESULT hr = S_OK;
|
|
|
|
(*pnPages)++;
|
|
|
|
// If not only counting, create and register the page
|
|
if (!fCountOnly)
|
|
{
|
|
HPROPSHEETPAGE hpsp;
|
|
PROPSHEETPAGE psp;
|
|
|
|
TraceTag(ttidWizard, "Creating Exit Page");
|
|
psp.dwSize = sizeof( PROPSHEETPAGE );
|
|
psp.dwFlags = 0;
|
|
psp.hInstance = _Module.GetResourceInstance();
|
|
psp.pszTemplate = MAKEINTRESOURCE( IDD_Exit );
|
|
psp.hIcon = NULL;
|
|
psp.pfnDlgProc = dlgprocExit;
|
|
psp.lParam = reinterpret_cast<LPARAM>(pWizard);
|
|
|
|
hpsp = CreatePropertySheetPage( &psp );
|
|
if (hpsp)
|
|
{
|
|
pWizard->RegisterPage(IDD_Exit, hpsp,
|
|
ExitPageCleanup, NULL);
|
|
}
|
|
else
|
|
{
|
|
hr = E_OUTOFMEMORY;
|
|
}
|
|
}
|
|
|
|
TraceHr(ttidWizard, FAL, hr, FALSE, "HrCreateExitPage");
|
|
return hr;
|
|
}
|
|
|
|
//
|
|
// Function: AppendExitPage
|
|
//
|
|
// Purpose: Add the Exit page, if it was created, to the set of pages
|
|
// that will be displayed.
|
|
//
|
|
// Parameters: pWizard [IN] - Ptr to Wizard Instance
|
|
// pahpsp [IN,OUT] - Array of pages to add our page to
|
|
// pcPages [IN,OUT] - Count of pages in pahpsp
|
|
//
|
|
// Returns: Nothing
|
|
//
|
|
VOID AppendExitPage(CWizard *pWizard, HPROPSHEETPAGE* pahpsp, UINT *pcPages)
|
|
{
|
|
TraceFileFunc(ttidGuiModeSetup);
|
|
|
|
HPROPSHEETPAGE hPage = pWizard->GetPageHandle(IDD_Exit);
|
|
Assert(hPage);
|
|
pahpsp[*pcPages] = hPage;
|
|
(*pcPages)++;
|
|
}
|