//---------------------------------------------------------------------------
//
//      File: PROPSEXT.CPP
//
//      Defines the CPropSheetExt object.
//
//---------------------------------------------------------------------------

#ifndef _PROPSEXT_H_
#define _PROPSEXT_H_

#include <windows.h>

#include <prsht.h>
#include <shlobj.h>


extern BOOL g_RunningOnNT;

//Type for an object-destroyed callback
typedef void (FAR PASCAL *LPFNDESTROYED)(void);


class CPropSheetExt : public IShellPropSheetExt
{
private:
        ULONG           m_cRef;
        LPUNKNOWN       m_pUnkOuter;    //Controlling unknown
        LPFNDESTROYED   m_pfnDestroy;   //Function closure call

public:
        CPropSheetExt( LPUNKNOWN pUnkOuter, LPFNDESTROYED pfnDestroy );
        ~CPropSheetExt(void);

        // IUnknown members
        STDMETHODIMP             QueryInterface(REFIID, LPVOID*);
        STDMETHODIMP_(ULONG) AddRef(void);
        STDMETHODIMP_(ULONG) Release(void);

    // *** IShellPropSheetExt methods ***
    STDMETHODIMP                AddPages( LPFNADDPROPSHEETPAGE lpfnAddPage, LPARAM lParam );
    STDMETHODIMP                ReplacePage( UINT uPageID, LPFNADDPROPSHEETPAGE lpfnReplaceWith, LPARAM lParam );
};

#ifndef ARRAYSIZE
#define ARRAYSIZE(x) (sizeof(x)/sizeof(x[0]))
#endif

#endif //_PROPSEXT_H_