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.
874 lines
20 KiB
874 lines
20 KiB
//+--------------------------------------------------------------------------
|
|
//
|
|
// Microsoft Windows
|
|
// Copyright (C) Microsoft Corporation, 1994 - 1996.
|
|
//
|
|
// File: wizpage.cxx
|
|
//
|
|
// Contents: Implementation of wizard page class
|
|
//
|
|
// History: 4-30-1997 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
#include "..\pch\headers.hxx"
|
|
#pragma hdrstop
|
|
#include "myheaders.hxx"
|
|
|
|
//
|
|
// CWizPage statics
|
|
//
|
|
|
|
ULONG CWizPage::s_cInstances;
|
|
HFONT CWizPage::s_hfBigBold;
|
|
HFONT CWizPage::s_hfBold;
|
|
#ifdef WIZARD95
|
|
SDIBitmap CWizPage::s_Splash;
|
|
#endif // WIZARD95
|
|
|
|
#define DEFAULT_LARGE_FONT_SIZE 14
|
|
|
|
|
|
//===========================================================================
|
|
//
|
|
// CPropPage overrides
|
|
//
|
|
//===========================================================================
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CWizPage::CWizPage
|
|
//
|
|
// Synopsis: ctor
|
|
//
|
|
// Arguments: [szTmplt] - dialog resource for page
|
|
// [ptszJobPath] - full path to task object
|
|
//
|
|
// History: 4-30-1997 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
CWizPage::CWizPage(
|
|
LPCTSTR szTmplt,
|
|
LPTSTR ptszJobPath):
|
|
#ifdef WIZARD95
|
|
_fActiveWindow(FALSE),
|
|
_fPaletteChanged(FALSE),
|
|
#endif // WIZARD95
|
|
CPropPage(szTmplt, ptszJobPath)
|
|
{
|
|
InterlockedIncrement((LPLONG) &s_cInstances);
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CWizPage::~CWizPage
|
|
//
|
|
// Synopsis: dtor
|
|
//
|
|
// History: 4-30-1997 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
CWizPage::~CWizPage()
|
|
{
|
|
//
|
|
// If no more instances of this class are active, destroy the gdi stuff
|
|
// stored in statics.
|
|
//
|
|
|
|
if (!InterlockedDecrement((LPLONG) &s_cInstances))
|
|
{
|
|
if (s_hfBigBold)
|
|
{
|
|
VERIFY(DeleteObject(s_hfBigBold));
|
|
s_hfBigBold = NULL;
|
|
}
|
|
|
|
if (s_hfBold)
|
|
{
|
|
VERIFY(DeleteObject(s_hfBold));
|
|
s_hfBold = NULL;
|
|
}
|
|
#ifdef WIZARD95
|
|
_DeleteSplashBitmap();
|
|
#endif // WIZARD95
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CWizPage::DlgProc
|
|
//
|
|
// Synopsis: Overrides the CPropPage dialog proc for special message
|
|
// handling, delegates to it for everything else.
|
|
//
|
|
// Arguments: standard windows
|
|
//
|
|
// Returns: standard windows
|
|
//
|
|
// History: 5-20-1997 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
LRESULT
|
|
CWizPage::DlgProc(
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam)
|
|
{
|
|
LRESULT lr;
|
|
|
|
if (uMsg == WM_INITDIALOG)
|
|
{
|
|
m_fInInit = TRUE;
|
|
_BaseInit();
|
|
|
|
//
|
|
// Create the gdi objects stored in statics if this is the first
|
|
// instance of the class to receive an initdialog.
|
|
//
|
|
|
|
#ifdef WIZARD95
|
|
if (!s_Splash.hbmp)
|
|
{
|
|
_CreateSplashBitmap();
|
|
}
|
|
#endif // WIZARD95
|
|
|
|
if(!s_hfBigBold && !s_hfBold)
|
|
{
|
|
_CreateHeaderFonts();
|
|
}
|
|
|
|
//
|
|
// Set the fonts of header strings to bold and large bold
|
|
//
|
|
|
|
_InitHeaderFonts();
|
|
|
|
//
|
|
// Let derived class init the dialog controls
|
|
//
|
|
|
|
lr = _OnInitDialog(lParam);
|
|
m_fInInit = FALSE;
|
|
}
|
|
else if (uMsg == g_msgFindWizard)
|
|
{
|
|
//
|
|
// If this wizard is already focused on the tasks folder indicated
|
|
// by lParam, come to the foreground and indicate to the caller
|
|
// that another wizard would be a duplicate and shouldn't be opened.
|
|
//
|
|
|
|
if (!lstrcmpi((LPCTSTR) lParam, GetTaskPath()))
|
|
{
|
|
SetForegroundWindow(GetParent(Hwnd()));
|
|
SetWindowLongPtr(Hwnd(), DWLP_MSGRESULT, g_msgFindWizard);
|
|
}
|
|
lr = TRUE; // indicate we processed message
|
|
}
|
|
#ifdef WIZARD95
|
|
else if (uMsg == WM_PALETTECHANGED && (HWND) wParam != Hwnd())
|
|
{
|
|
_fPaletteChanged = TRUE;
|
|
InvalidateRect(Hwnd(), NULL, FALSE);
|
|
}
|
|
else if (uMsg == WM_ACTIVATE)
|
|
{
|
|
_fActiveWindow = LOWORD(wParam) != WA_INACTIVE;
|
|
InvalidateRect(Hwnd(), NULL, FALSE);
|
|
}
|
|
#endif // WIZARD95
|
|
else if (uMsg == WM_PAINT)
|
|
{
|
|
#ifdef WIZARD95
|
|
//
|
|
// If some other window changed the palette, restore it before
|
|
// painting, unless we're merely a background app.
|
|
//
|
|
|
|
if (_fActiveWindow)
|
|
{
|
|
HDC hdc = GetDC(Hwnd());
|
|
|
|
if (!SelectPalette(hdc, s_Splash.hPalette, FALSE))
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
}
|
|
|
|
if (RealizePalette(hdc) == GDI_ERROR)
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
}
|
|
|
|
_fPaletteChanged = FALSE;
|
|
ReleaseDC(Hwnd(), hdc);
|
|
}
|
|
#endif // WIZARD95
|
|
|
|
//
|
|
// Do any custom painting required (the splash bitmap on first and
|
|
// last pages). Returning FALSE will allow the dialog manager to
|
|
// process the paint as well.
|
|
//
|
|
|
|
lr = _OnPaint((HDC) wParam);
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// The message has no special meaning for the wizard; delegate
|
|
// to base class so it can dispatch to the appropriate member.
|
|
//
|
|
|
|
lr = CPropPage::DlgProc(uMsg, wParam, lParam);
|
|
}
|
|
|
|
return lr;
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CWizPage::_OnNotify
|
|
//
|
|
// Synopsis: Aggregate the CPropPage WM_NOTIFY handler to provide
|
|
// wizard-specific dispatching.
|
|
//
|
|
// Arguments: standard windows
|
|
//
|
|
// Returns: standard windows
|
|
//
|
|
// History: 5-20-1997 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
LRESULT
|
|
CWizPage::_OnNotify(
|
|
UINT uMessage,
|
|
UINT uParam,
|
|
LPARAM lParam)
|
|
{
|
|
// TRACE_METHOD(CWizPage, _OnNotify);
|
|
|
|
LPNMHDR pnmhdr = (LPNMHDR) lParam;
|
|
|
|
switch (pnmhdr->code)
|
|
{
|
|
//
|
|
// Delegate to base class for notification processing it provides
|
|
// which we don't need to override.
|
|
//
|
|
|
|
default:
|
|
return CPropPage::_OnNotify(uMessage, uParam, lParam);
|
|
|
|
//
|
|
// Support notifications unique to wizard pages
|
|
//
|
|
|
|
case PSN_WIZBACK:
|
|
return _OnWizBack();
|
|
|
|
case PSN_WIZNEXT:
|
|
return _OnWizNext();
|
|
|
|
case PSN_WIZFINISH:
|
|
return _OnWizFinish();
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
|
|
|
|
//===========================================================================
|
|
//
|
|
// CWizPage methods
|
|
//
|
|
//===========================================================================
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CWizPage::_OnPaint
|
|
//
|
|
// Synopsis: Return FALSE to let dialog manager handle painting.
|
|
//
|
|
// History: 5-22-1997 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
LRESULT
|
|
CWizPage::_OnPaint(
|
|
HDC hdc)
|
|
{
|
|
#ifdef WIZARD95
|
|
DEBUG_ASSERT(!hdc);
|
|
_PaintSplashBitmap();
|
|
#endif // WIZARD95
|
|
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CWizPage::_OnWizBack
|
|
//
|
|
// Synopsis: Default handling of PSN_WIZBACK
|
|
//
|
|
// History: 5-20-1997 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
LRESULT
|
|
CWizPage::_OnWizBack()
|
|
{
|
|
TRACE_METHOD(CWizPage, _OnWizBack);
|
|
|
|
SetWindowLongPtr(Hwnd(), DWLP_MSGRESULT, 0);
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CWizPage::_OnWizNext
|
|
//
|
|
// Synopsis: Default handling of PSN_WIZNEXT
|
|
//
|
|
// History: 5-20-1997 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
LRESULT
|
|
CWizPage::_OnWizNext()
|
|
{
|
|
TRACE_METHOD(CWizPage, _OnWizNext);
|
|
|
|
SetWindowLongPtr(Hwnd(), DWLP_MSGRESULT, 0);
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CWizPage::_OnWizFinish
|
|
//
|
|
// Synopsis: Default handling of PSN_WIZFINISH
|
|
//
|
|
// History: 5-20-1997 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
LRESULT
|
|
CWizPage::_OnWizFinish()
|
|
{
|
|
TRACE_METHOD(CWizPage, _OnWizFinish);
|
|
|
|
SetWindowLongPtr(Hwnd(), DWLP_MSGRESULT, 0);
|
|
return 0;
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CWizPage::_InitHeaderFonts
|
|
//
|
|
// Synopsis: Set the font for controls having the BOLDTITLE identifiers.
|
|
//
|
|
// History: 5-20-1997 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
VOID
|
|
CWizPage::_InitHeaderFonts()
|
|
{
|
|
_SetControlFont(s_hfBigBold, IDC_BIGBOLDTITLE);
|
|
_SetControlFont(s_hfBold, IDC_BOLDTITLE);
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CWizPage::_SetControlFont
|
|
//
|
|
// Synopsis: Set the font of control [nId] to [hFont]
|
|
//
|
|
// Arguments: [hFont] - font to use
|
|
// [nId] - id of control to set
|
|
//
|
|
// History: 5-20-1997 DavidMun Created
|
|
//
|
|
// Notes: Does nothing if control not found or font handle is NULL.
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
VOID
|
|
CWizPage::_SetControlFont(
|
|
HFONT hFont,
|
|
INT nId)
|
|
{
|
|
if (hFont)
|
|
{
|
|
HWND hwndControl = _hCtrl(nId);
|
|
|
|
if (hwndControl)
|
|
{
|
|
SetWindowFont(hwndControl, hFont, TRUE);
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CWizPage::_CreateHeaderFonts
|
|
//
|
|
// Synopsis: Create fonts used in header title static text controls.
|
|
//
|
|
// History: 5-20-1997 DavidMun Stolen from sample wizard97 code
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
VOID
|
|
CWizPage::_CreateHeaderFonts()
|
|
{
|
|
DEBUG_ASSERT(!s_hfBigBold);
|
|
DEBUG_ASSERT(!s_hfBold);
|
|
|
|
//
|
|
// Create the fonts we need based on the dialog font
|
|
//
|
|
|
|
NONCLIENTMETRICS ncm;
|
|
|
|
SecureZeroMemory(&ncm, sizeof(ncm));
|
|
ncm.cbSize = sizeof(ncm);
|
|
VERIFY(SystemParametersInfo(SPI_GETNONCLIENTMETRICS, 0, &ncm, 0));
|
|
|
|
LOGFONT lfBigBold = ncm.lfMessageFont;
|
|
LOGFONT lfBold = ncm.lfMessageFont;
|
|
|
|
//
|
|
// Create Big Bold Font and Bold Font
|
|
//
|
|
|
|
lfBigBold.lfWeight = FW_BOLD;
|
|
lfBold.lfWeight = FW_BOLD;
|
|
|
|
TCHAR tszFontSizeString[24];
|
|
ULONG ulFontSize;
|
|
|
|
//
|
|
// Load size and name from resources, since these may change
|
|
// from locale to locale based on the size of the system font, etc.
|
|
//
|
|
|
|
BOOL fOk;
|
|
|
|
fOk = LoadString(g_hInstance,
|
|
IDS_LARGEFONTNAME,
|
|
lfBigBold.lfFaceName,
|
|
LF_FACESIZE);
|
|
|
|
if (!fOk)
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
StringCchCopy(lfBigBold.lfFaceName, LF_FACESIZE, TEXT("MS Shell Dlg"));
|
|
}
|
|
|
|
fOk = LoadString(g_hInstance,
|
|
IDS_LARGEFONTSIZE,
|
|
tszFontSizeString,
|
|
ARRAYLEN(tszFontSizeString));
|
|
|
|
if (fOk)
|
|
{
|
|
ulFontSize = _tcstoul(tszFontSizeString, NULL, 10);
|
|
}
|
|
|
|
if (!fOk || !ulFontSize)
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
ulFontSize = DEFAULT_LARGE_FONT_SIZE;
|
|
}
|
|
|
|
HDC hdc = GetDC(Hwnd());
|
|
|
|
if (hdc)
|
|
{
|
|
//
|
|
// See KB article PSS ID Number Q74299,
|
|
// "Calculating The Logical Height and Point Size of a Font"
|
|
//
|
|
|
|
lfBigBold.lfHeight = -MulDiv((INT) ulFontSize,
|
|
GetDeviceCaps(hdc, LOGPIXELSY),
|
|
72);
|
|
|
|
s_hfBigBold = CreateFontIndirect(&lfBigBold);
|
|
|
|
if (!s_hfBigBold)
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
}
|
|
|
|
s_hfBold = CreateFontIndirect(&lfBold);
|
|
|
|
if (!s_hfBold)
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
}
|
|
|
|
ReleaseDC(Hwnd(), hdc);
|
|
}
|
|
else
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
#ifdef WIZARD95
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CWizPage::_CreateSplashBitmap
|
|
//
|
|
// Synopsis: Initialize a memory dc with the bitmap used on the first
|
|
// and last pages.
|
|
//
|
|
// History: 5-22-1997 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
VOID
|
|
CWizPage::_CreateSplashBitmap()
|
|
{
|
|
TRACE_METHOD(CWizPage, _CreateSplashBitmap);
|
|
|
|
DEBUG_ASSERT(!s_Splash.hbmp);
|
|
DEBUG_ASSERT(!s_Splash.hdcMem);
|
|
DEBUG_ASSERT(!s_Splash.hPalette);
|
|
|
|
HDC hdc = NULL;
|
|
HRESULT hr = E_FAIL;
|
|
|
|
do
|
|
{
|
|
s_Splash.hbmp = LoadResourceBitmap(IDB_SPLASH, &s_Splash.hPalette);
|
|
|
|
if (!s_Splash.hbmp)
|
|
{
|
|
break;
|
|
}
|
|
|
|
BITMAP bm;
|
|
|
|
if (!GetObject(s_Splash.hbmp, sizeof(bm), (LPTSTR)&bm))
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
break;
|
|
}
|
|
|
|
s_Splash.Dimensions.cx = bm.bmWidth;
|
|
s_Splash.Dimensions.cy = bm.bmHeight;
|
|
|
|
hdc = GetDC(Hwnd());
|
|
|
|
if (!hdc)
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
break;
|
|
}
|
|
|
|
s_Splash.hdcMem = CreateCompatibleDC(hdc);
|
|
|
|
if (!s_Splash.hdcMem)
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
break;
|
|
}
|
|
|
|
if (!SelectPalette(hdc, s_Splash.hPalette, FALSE))
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
break;
|
|
}
|
|
|
|
UINT uiResult = RealizePalette(hdc);
|
|
|
|
if (uiResult == GDI_ERROR)
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
break;
|
|
}
|
|
|
|
if (!SelectPalette(s_Splash.hdcMem, s_Splash.hPalette, FALSE))
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
break;
|
|
}
|
|
|
|
uiResult = RealizePalette(s_Splash.hdcMem);
|
|
|
|
if (uiResult == GDI_ERROR)
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
break;
|
|
}
|
|
|
|
s_Splash.hbmpOld = (HBITMAP) SelectObject(s_Splash.hdcMem,
|
|
s_Splash.hbmp);
|
|
|
|
|
|
hr = S_OK;
|
|
} while (0);
|
|
|
|
if (hdc)
|
|
{
|
|
ReleaseDC(Hwnd(), hdc);
|
|
}
|
|
|
|
if (FAILED(hr))
|
|
{
|
|
_DeleteSplashBitmap();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CWizPage::_DeleteSplashBitmap
|
|
//
|
|
// Synopsis: Free all gdi objects associated with splash bitmap.
|
|
//
|
|
// History: 5-22-1997 DavidMun Created
|
|
//
|
|
// Notes: Properly destroys a partly-initialized struct. If the
|
|
// struct is already empty, does nothing.
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
VOID
|
|
CWizPage::_DeleteSplashBitmap()
|
|
{
|
|
TRACE_METHOD(CWizPage, _DeleteSplashBitmap);
|
|
|
|
if (s_Splash.hdcMem)
|
|
{
|
|
DEBUG_ASSERT(s_Splash.hbmp);
|
|
DEBUG_ASSERT(s_Splash.hPalette);
|
|
|
|
if (s_Splash.hbmpOld)
|
|
{
|
|
HBITMAP hbmp;
|
|
|
|
hbmp = (HBITMAP) SelectObject(s_Splash.hdcMem, s_Splash.hbmpOld);
|
|
|
|
DEBUG_ASSERT(hbmp == s_Splash.hbmp);
|
|
s_Splash.hbmpOld = NULL;
|
|
|
|
VERIFY(DeleteObject(s_Splash.hbmp));
|
|
s_Splash.hbmp = NULL;
|
|
}
|
|
|
|
VERIFY(DeleteDC(s_Splash.hdcMem));
|
|
VERIFY(DeleteObject(s_Splash.hPalette));
|
|
|
|
s_Splash.hdcMem = NULL;
|
|
s_Splash.hPalette = NULL;
|
|
}
|
|
else if (s_Splash.hbmp)
|
|
{
|
|
DEBUG_ASSERT(s_Splash.hPalette);
|
|
VERIFY(DeleteObject(s_Splash.hbmp));
|
|
VERIFY(DeleteObject(s_Splash.hPalette));
|
|
s_Splash.hbmp = NULL;
|
|
s_Splash.hPalette = NULL;
|
|
}
|
|
else
|
|
{
|
|
DEBUG_ASSERT(!s_Splash.hbmp);
|
|
DEBUG_ASSERT(!s_Splash.hPalette);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CWizPage::_PaintSplashBitmap
|
|
//
|
|
// Synopsis: Paint the splash bitmap onto the dialog window.
|
|
//
|
|
// History: 5-22-1997 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
VOID
|
|
CWizPage::_PaintSplashBitmap()
|
|
{
|
|
TRACE_METHOD(CWizPage, _PaintSplashBitmap);
|
|
HDC hdc = NULL;
|
|
|
|
do
|
|
{
|
|
//
|
|
// If an error prevented us from loading & processing the bitmap,
|
|
// there's nothing to paint.
|
|
//
|
|
|
|
if (!s_Splash.hdcMem)
|
|
{
|
|
break;
|
|
}
|
|
|
|
//
|
|
// Get the device context of this page's dialog, then blast the
|
|
// bitmap onto it.
|
|
//
|
|
|
|
hdc = GetDC(Hwnd());
|
|
|
|
if (!hdc)
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
break;
|
|
}
|
|
|
|
BOOL fOk = BitBlt(hdc,
|
|
0,
|
|
0,
|
|
s_Splash.Dimensions.cx,
|
|
s_Splash.Dimensions.cy,
|
|
s_Splash.hdcMem,
|
|
0,
|
|
0,
|
|
SRCCOPY);
|
|
|
|
if (!fOk)
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
break;
|
|
}
|
|
|
|
//
|
|
// Mark the area containing the bitmap as a valid rect, so the
|
|
// dialog manager won't paint over it.
|
|
//
|
|
|
|
RECT rc =
|
|
{
|
|
0,
|
|
0,
|
|
s_Splash.Dimensions.cx,
|
|
s_Splash.Dimensions.cy
|
|
};
|
|
|
|
ValidateRect(Hwnd(), &rc);
|
|
} while (0);
|
|
|
|
if (hdc)
|
|
{
|
|
ReleaseDC(Hwnd(), hdc);
|
|
}
|
|
}
|
|
#endif // WIZARD95
|
|
|
|
|
|
|
|
|
|
//+--------------------------------------------------------------------------
|
|
//
|
|
// Member: CWizPage::_CreatePage
|
|
//
|
|
// Synopsis: Helper function that optionally loads title and subtitle
|
|
// strings, sets appropriate flags, then creates the page.
|
|
//
|
|
// Arguments: [idsHeaderTitle] - resource id of title, or 0 for none
|
|
// [idsHeaderSubTitle] - resource id of subtitle, or 0 for none
|
|
// [phPSP] - filled with handle returned by
|
|
// CreatePropertySheetPage
|
|
//
|
|
// Modifies: *[phPSP]
|
|
//
|
|
// History: 5-01-1997 DavidMun Created
|
|
//
|
|
//---------------------------------------------------------------------------
|
|
|
|
VOID
|
|
CWizPage::_CreatePage(
|
|
ULONG idsHeaderTitle,
|
|
ULONG idsHeaderSubTitle,
|
|
HPROPSHEETPAGE *phPSP)
|
|
{
|
|
TCHAR tszHeaderTitle[MAX_TITLE_CCH];
|
|
TCHAR tszHeaderSubTitle[MAX_TITLE_CCH];
|
|
HRESULT hr;
|
|
|
|
#ifdef WIZARD97
|
|
if (idsHeaderTitle)
|
|
{
|
|
hr = LoadStr(idsHeaderTitle, tszHeaderTitle, MAX_TITLE_CCH);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
m_psp.dwFlags |= PSP_USEHEADERTITLE;
|
|
}
|
|
}
|
|
|
|
if (idsHeaderSubTitle)
|
|
{
|
|
hr = LoadStr(idsHeaderSubTitle, tszHeaderSubTitle, MAX_TITLE_CCH);
|
|
|
|
if (SUCCEEDED(hr))
|
|
{
|
|
m_psp.dwFlags |= PSP_USEHEADERSUBTITLE;
|
|
}
|
|
}
|
|
|
|
m_psp.pszHeaderTitle = tszHeaderTitle;
|
|
m_psp.pszHeaderSubTitle = tszHeaderSubTitle;
|
|
#endif // WIZARD97
|
|
|
|
*phPSP = CreatePropertySheetPage(&m_psp);
|
|
|
|
if (!*phPSP)
|
|
{
|
|
DEBUG_OUT_LASTERROR;
|
|
}
|
|
}
|