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.
 
 
 
 
 
 

229 lines
5.1 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1999
//
// File: wizbase.h
//
//--------------------------------------------------------------------------
#ifndef _WIZBASE_H
#define _WIZBASE_H
#include "util.h"
////////////////////////////////////////////////////////////////////////////
// FWD DECLARATIONS
////////////////////////////////////////////////////////////////////////////
// CWizardBase
class CWizardBase : public CPropertySheet
{
public:
// construction/ destruction
CWizardBase(UINT nWatermarkBitmapID, UINT nBannerBitmapID, UINT nTitleID = -1)
{
m_psh.hplWatermark = NULL;
m_psh.dwFlags |= PSH_WIZARD | PSH_WIZARD97 | PSH_WATERMARK | PSH_HEADER;
m_psh.pszbmWatermark = MAKEINTRESOURCE(nWatermarkBitmapID);
m_psh.pszbmHeader = MAKEINTRESOURCE(nBannerBitmapID);
m_bFwd = TRUE;
m_nTitleID = nTitleID;
}
virtual ~CWizardBase(){}
// message map
BEGIN_MSG_MAP(CWizardBase)
MESSAGE_HANDLER(WM_NCDESTROY, OnNcDestroy)
END_MSG_MAP()
// message handlers
LRESULT OnNcDestroy(UINT uMsg, WPARAM wParam,
LPARAM lParam, BOOL& bHandled)
{
// NOTICE: important!!!. BUG workaround.
// We have to handle this message because we use ATL 2.1
// The DECLARE_EMPTY_MSG_MAP() macro in the new ATLWIN.H
// works only with the modified CWindowImplBase::WindowProc()
return DefWindowProc(uMsg, wParam, lParam);
}
// helpers for setting wizard buttons
void SetWizardButtonsFirst(BOOL bValid)
{
SetWizardButtons(bValid ? PSWIZB_NEXT : 0);
}
void SetWizardButtonsMiddle(BOOL bValid)
{
SetWizardButtons(bValid ? (PSWIZB_BACK|PSWIZB_NEXT) : PSWIZB_BACK);
}
void SetWizardButtonsLast(BOOL bValid)
{
SetWizardButtons(bValid ? (PSWIZB_BACK|PSWIZB_FINISH) : (PSWIZB_BACK|PSWIZB_DISABLEDFINISH));
}
// message box helpers
int WizMessageBox(LPCTSTR lpszText, UINT nType = MB_OK)
{
CWString szTitle;
szTitle.LoadFromResource(m_nTitleID);
return MessageBox(lpszText, szTitle, nType);
}
int WizMessageBox(UINT nMsgID, UINT nType = MB_OK)
{
CWString szMsg;
szMsg.LoadFromResource(nMsgID);
return WizMessageBox(szMsg, nType);
}
// error message helpers
void WizReportHRESULTError(LPCWSTR lpszMsg, HRESULT hr)
{
CWString szErrorString;
if (GetStringFromHRESULTError(hr, szErrorString))
{
CWString szTemp;
szTemp = lpszMsg;
szTemp += L" ";
szTemp += szErrorString;
WizMessageBox(szTemp);
}
else
{
WizMessageBox(lpszMsg);
}
}
void WizReportHRESULTError(UINT nStringID, HRESULT hr)
{
CWString szMsg;
szMsg.LoadFromResource(nStringID);
WizReportHRESULTError(szMsg, hr);
}
void WizReportWin32Error(LPCWSTR lpszMsg, DWORD dwErr)
{
CWString szErrorString;
if (GetStringFromWin32Error(dwErr, szErrorString))
{
CWString szTemp;
szTemp = lpszMsg;
szTemp += L" ";
szTemp += szErrorString;
WizMessageBox(szTemp);
}
else
{
WizMessageBox(lpszMsg);
}
}
void WizReportWin32Error(UINT nStringID, DWORD dwErr)
{
CWString szMsg;
szMsg.LoadFromResource(nStringID);
WizReportWin32Error(szMsg, dwErr);
}
public:
BOOL m_bFwd;
private:
UINT m_nTitleID;
};
////////////////////////////////////////////////////////////////////////////
// CWizPageBase
template <class T>
class CWizPageBase : public CPropertyPageImpl<T>
{
public:
CWizPageBase(CWizardBase* pWiz)
{
m_pWiz = pWiz;
m_lpszHeaderTitleBuf = NULL;
m_lpszHeaderSubTitleBuf = NULL;
m_nPrevPageID = 0;
}
~CWizPageBase()
{
if (m_lpszHeaderTitleBuf != NULL)
delete[] m_lpszHeaderTitleBuf;
if (m_lpszHeaderSubTitleBuf != NULL)
delete[] m_lpszHeaderSubTitleBuf;
}
CWizardBase* GetWizard() { return m_pWiz; }
void InitWiz97(BOOL bHideHeader, UINT nTitleID=0, UINT nSubTitleID=0)
{
if (bHideHeader)
m_psp.dwFlags |= PSP_HIDEHEADER;
else
{
int nBufferMax = 128;
if (nTitleID != 0)
{
m_lpszHeaderTitleBuf = new TCHAR[nBufferMax];
if( m_lpszHeaderTitleBuf )
{
if (LoadStringHelper(nTitleID, m_lpszHeaderTitleBuf, nBufferMax))
{
m_psp.dwFlags |= PSP_USEHEADERTITLE;
m_psp.pszHeaderTitle = m_lpszHeaderTitleBuf;
}
}
}
if (nSubTitleID != 0)
{
m_lpszHeaderSubTitleBuf = new TCHAR[nBufferMax];
if(m_lpszHeaderSubTitleBuf )
{
LoadStringHelper(nSubTitleID, m_lpszHeaderSubTitleBuf, nBufferMax);
m_psp.dwFlags |= PSP_USEHEADERSUBTITLE;
m_psp.pszHeaderSubTitle = m_lpszHeaderSubTitleBuf;
}
}
}
}
public:
// standard wizard message handlers
LRESULT OnWizardBack()
{
m_pWiz->m_bFwd = FALSE;
UINT nTempPrevPageID = m_nPrevPageID;
m_nPrevPageID = 0;
return nTempPrevPageID;
}
LRESULT OnWizardNext()
{
OnWizardNextHelper();
return 0;
}
void OnWizardNextHelper()
{
m_pWiz->m_bFwd = TRUE;
}
public:
UINT m_nPrevPageID;
private:
CWizardBase* m_pWiz;
LPTSTR m_lpszHeaderTitleBuf;
LPTSTR m_lpszHeaderSubTitleBuf;
};
#endif // _WIZBASE_H