#include "icwconn.h"
#include "icwacct.h"

extern  UINT                g_uICWCONNUIFirst, g_uICWCONNUILast;

#ifndef EXTERNAL_DIALOGID_MAXIMUM
#define EXTERNAL_DIALOGID_MAXIMUM 3000
#endif
#ifndef EXTERNAL_DIALOGID_MINIMUM
#define EXTERNAL_DIALOGID_MINIMUM 2000
#endif

class CICWExtension : public IICW50Extension
{
    public:
        virtual BOOL    STDMETHODCALLTYPE AddExternalPage(HPROPSHEETPAGE hPage, UINT uDlgID);
        virtual BOOL    STDMETHODCALLTYPE RemoveExternalPage(HPROPSHEETPAGE hPage, UINT uDlgID);
        virtual BOOL    STDMETHODCALLTYPE ExternalCancel(CANCELTYPE type);
        virtual BOOL    STDMETHODCALLTYPE SetFirstLastPage(UINT uFirstPageDlgID, UINT uLastPageDlgID);
        virtual HWND    STDMETHODCALLTYPE GetWizardHwnd(void)
        {
            return m_hWizardHWND;
        };            
        
        virtual HRESULT STDMETHODCALLTYPE QueryInterface( REFIID theGUID, void** retPtr );
        virtual ULONG   STDMETHODCALLTYPE AddRef( void );
        virtual ULONG   STDMETHODCALLTYPE Release( void );

        CICWExtension( void );
        ~CICWExtension( void );

        HWND m_hWizardHWND;

    private:
        LONG    m_lRefCount;
};

// This _has_ to be a pointer -- if you just instantiate directly, the compiler doesn't
// correctly fill in the vtable, and thus it can't be treated as an IICWExtension pointer.
extern CICWExtension        *g_pCICWExtension;
extern CICWExtension        *g_pCINETCFGExtension;
extern IICW50Apprentice     *gpICWCONNApprentice;
extern IICWApprenticeEx     *gpINETCFGApprentice;

extern BOOL LoadICWCONNUI( HWND hWizHWND, UINT uPrevDlgID, UINT uNextDlgID, DWORD dwFlags );
extern BOOL LoadInetCfgUI( HWND hWizHWND, UINT uPrevDlgID, UINT uNextDlgID, DWORD dwFlags );