Dynamic display
CustomLayerBase.h
// Copyright 2011 ESRI
// 
// All rights reserved under the copyright laws of the United States
// and applicable international laws, treaties, and conventions.
// 
// You may freely redistribute and use this sample code, with or
// without modification, provided you include the original copyright
// notice and use restrictions.
// 
// See the use restrictions.
// 

  

#ifndef __DYNAMICDISPLAY__CUSTOMLAYERBASE_H__
#define __DYNAMICDISPLAY__CUSTOMLAYERBASE_H__

#include <ArcSDK.h>
#ifdef ESRI_UNIX
#undef _WIN32
#endif

class CustomLayerBase:
  //public IUnknown,
  public IGeoDataset,
  public ILayer,
  public IDynamicLayer
{
public:
  CustomLayerBase();
  ~CustomLayerBase();
  
// IGeoDataset
  HRESULT STDMETHODCALLTYPE get_Extent(IEnvelope** Extent);
  HRESULT STDMETHODCALLTYPE get_SpatialReference(ISpatialReference** SpatialReference);

// ILayer
  HRESULT STDMETHODCALLTYPE get_Name(BSTR* Name);
  HRESULT STDMETHODCALLTYPE put_Name(BSTR Name);
  HRESULT STDMETHODCALLTYPE get_Valid(VARIANT_BOOL* Valid);
  HRESULT STDMETHODCALLTYPE get_AreaOfInterest(IEnvelope** aoi);
  HRESULT STDMETHODCALLTYPE get_MinimumScale(double* MinScale);
  HRESULT STDMETHODCALLTYPE put_MinimumScale(double MinScale);
  HRESULT STDMETHODCALLTYPE get_MaximumScale(double* MaxScale);
  HRESULT STDMETHODCALLTYPE put_MaximumScale(double MaxScale);
  HRESULT STDMETHODCALLTYPE get_Visible(VARIANT_BOOL* Visible);
  HRESULT STDMETHODCALLTYPE put_Visible(VARIANT_BOOL Visible);
  HRESULT STDMETHODCALLTYPE get_ShowTips(VARIANT_BOOL* show);
  HRESULT STDMETHODCALLTYPE put_ShowTips(VARIANT_BOOL show);
  HRESULT STDMETHODCALLTYPE get_TipText(double x, double y, double Tolerance, BSTR* Text);
  HRESULT STDMETHODCALLTYPE get_Cached(VARIANT_BOOL* Cached);
  HRESULT STDMETHODCALLTYPE put_Cached(VARIANT_BOOL Cached);
  HRESULT STDMETHODCALLTYPE get_SupportedDrawPhases(long* drawPhases);
  HRESULT STDMETHODCALLTYPE putref_SpatialReference(ISpatialReference* SpatialReference);
  HRESULT STDMETHODCALLTYPE Draw(esriDrawPhase DrawPhase, IDisplay* Display, ITrackCancel* TrackCancel);

// IDynamicLayer
  virtual HRESULT STDMETHODCALLTYPE get_DynamicLayerDirty(esriDynamicDrawPhase DynamicDrawPhase, VARIANT_BOOL* Dirty) = 0;
  virtual HRESULT STDMETHODCALLTYPE put_DynamicLayerDirty(esriDynamicDrawPhase DynamicDrawPhase, VARIANT_BOOL Dirty) = 0;
  virtual HRESULT STDMETHODCALLTYPE get_DynamicRecompileRate(long* dynamicRecompileRateTimeMS) = 0;
  virtual HRESULT STDMETHODCALLTYPE DrawDynamicLayer(esriDynamicDrawPhase DynamicDrawPhase, IDisplay* Display, IDynamicDisplay* DynamicDisplay) = 0;
  
// IUnknown
  HRESULT STDMETHODCALLTYPE QueryInterface(REFIID riid, void** ppv);
  ULONG   STDMETHODCALLTYPE AddRef(void);
  ULONG   STDMETHODCALLTYPE Release(void);

private:
  IEnvelopePtr         m_ipExtent;  
  ISpatialReferencePtr m_SpatialRef;
  CComBSTR             m_bstrNomeLyr;
  double               m_MinScale;
  double               m_MaxScale;
  VARIANT_BOOL         m_Visibile;
  VARIANT_BOOL         m_ShowTips;
  VARIANT_BOOL         m_Cache;
  ULONG                m_RefCount;
};

#endif /* __DYNAMICDISPLAY__CUSTOMLAYERBASE_H__  */