#ifndef _PROPPAGE_H_
#define _PROPPAGE_H_
/*++

Copyright (C) 1997-1999  Microsoft Corporation

Module Name:

    proppage.h

Abstract:

    header file for proppage.cpp

Author:

    William Hsieh (williamh) created

Revision History:


--*/


class CPropSheetPage
{
public:
    CPropSheetPage(HINSTANCE hInst, UINT idTemplate);
    virtual ~CPropSheetPage()
    {}
    static INT_PTR CALLBACK PageDlgProc(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam);
    static UINT CALLBACK PageCallback(HWND hDlg, UINT uMsg, LPPROPSHEETPAGE ppsp);
protected:
    HWND    GetControl(int ControlId)
    {
        ASSERT(m_hDlg);
        return GetDlgItem(m_hDlg, ControlId);
    }

    virtual BOOL OnInitDialog(LPPROPSHEETPAGE ppsp)
    {
        return TRUE;
    }

    virtual void UpdateControls(LPARAM lParam = 0)
    {

    }
    virtual BOOL OnApply()
    {
        ASSERT(m_hDlg);
        SetWindowLongPtr(m_hDlg, DWLP_MSGRESULT, 0L);
        return FALSE;
    }
    virtual BOOL OnLastChanceApply()
    {
        ASSERT(m_hDlg);
        return FALSE;
    }
    virtual BOOL OnWizFinish()
    {
        ASSERT(m_hDlg);
        SetWindowLongPtr(m_hDlg, DWLP_MSGRESULT, 0L);
        return FALSE;
    }
    virtual BOOL OnWizNext()
    {
        ASSERT(m_hDlg);
        SetWindowLongPtr(m_hDlg, DWLP_MSGRESULT, -1L);
        return FALSE;
    }
    virtual BOOL OnWizBack()
    {
        ASSERT(m_hDlg);
        SetWindowLongPtr(m_hDlg, DWLP_MSGRESULT, -1L);
        return FALSE;
    }
    virtual BOOL OnSetActive()
    {
        ASSERT(m_hDlg);
        m_Active = TRUE;
        if (m_AlwaysUpdateOnActive || m_UpdateControlsPending)
        {
            UpdateControls();
            m_UpdateControlsPending = FALSE;
        }
        SetWindowLongPtr(m_hDlg, DWLP_MSGRESULT, 0L);
        return FALSE;
    }
    virtual BOOL OnKillActive()
    {
        ASSERT(m_hDlg);
        m_Active = FALSE;
        SetWindowLongPtr(m_hDlg, DWLP_MSGRESULT, 0L);
        return FALSE;
    }
    virtual BOOL OnReset()
    {
        ASSERT(m_hDlg);
        SetWindowLongPtr(m_hDlg, DWLP_MSGRESULT, 0L);
        return FALSE;
    }
    virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam)
    {
        return FALSE;
    }
    virtual BOOL OnQuerySiblings(WPARAM wParam, LPARAM lParam);
    virtual BOOL OnNotify(LPNMHDR pnmhdr)
    {
        ASSERT(m_hDlg);
        SetWindowLongPtr(m_hDlg, DWLP_MSGRESULT, 0L);
        return FALSE;
    }
    virtual BOOL OnDestroy();
    virtual BOOL OnHelp(LPHELPINFO pHelpInfo)
    {
        return FALSE;
    }

    virtual BOOL OnContextMenu(HWND hWnd, WORD xPos, WORD yPos)
    {
        return FALSE;
    }

    virtual UINT CreateCallback()
    {
        return TRUE;
    }
    virtual UINT DestroyCallback();

    HPROPSHEETPAGE CreatePage()
    {
        return ::CreatePropertySheetPage(&m_psp);
    }

    HWND        m_hDlg;
    PROPSHEETPAGE   m_psp;
    BOOL        m_Active;
    BOOL        m_AlwaysUpdateOnActive;
    BOOL        m_UpdateControlsPending;
    int             m_IDCicon;
};

#endif