//+------------------------------------------------------------------------- // // 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 CWizPageBase : public CPropertyPageImpl { 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