//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1995 - 1995.
//
//  File:       xicon.hxx
//
//  Contents:   Declaration of CSharesEI & CSharesEIA, implementations
//              of IExtractIcon
//
//  History:    14-Dec-95    BruceFo     Created
//
//----------------------------------------------------------------------------

#ifndef __XICON_HXX__
#define __XICON_HXX__

//////////////////////////////////////////////////////////////////////////////

class CSharesEI : public IExtractIcon
{
public:

    CSharesEI(IN BYTE bFlags, IN DWORD type) : m_ulRefs(0), m_bFlags(bFlags), m_dwType(type) { AddRef(); }
    ~CSharesEI() {}

    //
    // IUnknown methods
    //

    STDMETHOD(QueryInterface)(REFIID riid, LPVOID* ppvObj);
    STDMETHOD_(ULONG,AddRef)();
    STDMETHOD_(ULONG,Release)();

    //
    // IExtractIcon methods
    //

    STDMETHOD(GetIconLocation)(
        UINT   uFlags,
        LPWSTR szIconFile,
        UINT   cchMax,
        int*   piIndex,
        UINT*  pwFlags
        );

    STDMETHOD(Extract)(
        LPCWSTR pszFile,
        UINT    nIconIndex,
        HICON*  phiconLarge,
        HICON*  phiconSmall,
        UINT    nIconSize
        );

private:

    ULONG m_ulRefs;
    BYTE  m_bFlags;
	DWORD m_dwType;
};


#ifdef UNICODE

class CSharesEIA : public IExtractIconA
{
public:

    CSharesEIA(IN BYTE bFlags, IN DWORD type) : m_ulRefs(0), m_bFlags(bFlags), m_dwType(type) { AddRef(); }
    ~CSharesEIA() {}

    //
    // IUnknown methods
    //

    STDMETHOD(QueryInterface)(REFIID riid, LPVOID* ppvObj);
    STDMETHOD_(ULONG,AddRef)();
    STDMETHOD_(ULONG,Release)();

    //
    // IExtractIconA methods
    //

    STDMETHOD(GetIconLocation)(
        UINT   uFlags,
        LPSTR  szIconFile,
        UINT   cchMax,
        int*   piIndex,
        UINT*  pwFlags
        );

    STDMETHOD(Extract)(
        LPCSTR  pszFile,
        UINT    nIconIndex,
        HICON*  phiconLarge,
        HICON*  phiconSmall,
        UINT    nIconSize
        );

private:

    ULONG m_ulRefs;
    BYTE  m_bFlags;
	DWORD m_dwType;
};

#endif // UNICODE

#endif // __XICON_HXX__