///////////////////////////////////////////////////////////////////////////////
//
//  File Name 
//      EXTPRSHT.H
//
//  Description
//      Interface Methods are declared in this file for extprsht.cpp
//
//  Author
//      Gary Peluso
//
//  Revision: 1.00
//
// Written for Microsoft Windows Developer Support
// Copyright (c) 1992-1995 Microsoft Corporation. All rights reserved.
//
#ifndef __EXTPRSHT_H__
#define __EXTPRSHT_H__

#include <WINDOWS.H> 
#include <COMMCTRL.H>
#include <MAPIX.H>
#include <MAPIUTIL.H>
#include <MAPIFORM.H>
#include <EXCHEXT.H>

#include "RESOURCE.H"


///////////////////////////////////////////////////////////////////////////////
//    Prototypes
//

extern "C"
{
 LPEXCHEXT CALLBACK ExchEntryPoint(void);
}

BOOL CALLBACK SummaryPageDlgProc(HWND hDlg, UINT uMsg, 
        WPARAM wParam, LPARAM lParam);
void ErrorMessageBox(HWND hWnd, HRESULT hr, 
        LPSTR szFunction, LPSTR szMessage);
void GetNamedIDs(LPMESSAGE pMessage);
BOOL GetSummarySheetInfo(LPMESSAGE pMessage);
BOOL ValidDocObject(LPMAPIPROP pObject);
LPSTR GetFileTimeString(FILETIME * pft);

///////////////////////////////////////////////////////////////////////////////
//    Office document summary sheet information data
//

extern LPSPropValue pSummaryProps;
extern LPSTR szDocComments;
extern LPSTR szDocApplication;
extern LPSTR szDocTitle;
extern LPSTR szDocSubject;
extern LPSTR szDocAuthor;
extern SLPSTRArray mvszKeywords;
extern LPSTR szDocKeywords;   
extern LPSTR szDocLastSaved;
extern LPSTR szDocEditTime;
extern LPSTR szDocCategory;
extern LPSTR szDocCompany;


///////////////////////////////////////////////////////////////////////////////
//    forward declarations
//
class MyExchExt;
class MyExchExtPropertySheets;

class MyExchExt : public IExchExt
{
 
 public:
    MyExchExt(); 
    STDMETHODIMP QueryInterface
                    (REFIID                     riid,
                     LPVOID *                   ppvObj);
    inline STDMETHODIMP_(ULONG) AddRef
                    () { ++m_cRef; return m_cRef; };
    STDMETHODIMP_(ULONG) Release(); 
    STDMETHODIMP Install (LPEXCHEXTCALLBACK pmecb, 
                        ULONG mecontext, ULONG ulFlags);
    
 private:
    ULONG m_cRef;
    UINT  m_context;
    MyExchExtPropertySheets * m_pExchExtPropertySheets;

};

class MyExchExtPropertySheets : public IExchExtPropertySheets
{
 public:
    MyExchExtPropertySheets () { m_cRef = 0; };
    STDMETHODIMP QueryInterface
                    (REFIID                     riid,
                     LPVOID *                   ppvObj);
    inline STDMETHODIMP_(ULONG) AddRef
                    () { ++m_cRef; return m_cRef; };
    inline STDMETHODIMP_(ULONG) Release
                    () { ULONG ulCount = --m_cRef;
                         if (!ulCount) { delete this; }
                         return ulCount;};

    STDMETHODIMP_ (ULONG) GetMaxPageCount(ULONG ulFlags);          
    STDMETHODIMP  GetPages(LPEXCHEXTCALLBACK peecb,
                          ULONG ulFlags, LPPROPSHEETPAGE ppsp, ULONG FAR * pcpsp);          
    STDMETHODIMP_ (VOID) FreePages(LPPROPSHEETPAGE ppsp, ULONG ulFlags, 
                                         ULONG cpsp);          

 private:
    ULONG m_cRef;
    

};

#endif // __EXTPRSHT_H__
