230 lines
5.1 KiB
C++
230 lines
5.1 KiB
C++
//+-------------------------------------------------------------------------
|
|
//
|
|
// 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
|