Optimized_Renderer
OptimisedRenderer.h
/*
 Copyright 1995-2004 ESRI

 All rights reserved under the copyright laws of the United States.

 You may freely redistribute and use this sample code, with or without modification.

 Disclaimer: THE SAMPLE CODE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 
 WARRANTIES, INCLUDING THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 
 FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ESRI OR 
 CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, 
 OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
 INTERRUPTION) SUSTAINED BY YOU OR A THIRD PARTY, HOWEVER CAUSED AND ON ANY 
 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ARISING IN ANY 
 WAY OUT OF THE USE OF THIS SAMPLE CODE, EVEN IF ADVISED OF THE POSSIBILITY OF 
 SUCH DAMAGE.

 For additional information contact: Environmental Systems Research Institute, Inc.

 Attn: Contracts Dept.

 380 New York Street

 Redlands, California, U.S.A. 92373 

 Email: contracts@esri.com
*/
// OptimisedRenderer.h : Declaration of the COptimisedRenderer

#ifndef __OPTIMISEDRENDERER_H_
#define __OPTIMISEDRENDERER_H_

#include "resource.h"       // main symbols

DEFINE_GUID(CATID_MxCommands,
0xb56a7c42, 0x83d4, 0x11d2, 0xa2, 0xe9, 0x8, 0x0, 0x9, 0xb6, 0xf2, 0x2b);

_COM_SMARTPTR_TYPEDEF(IOptimisedRenderer, __uuidof(IOptimisedRenderer));

/////////////////////////////////////////////////////////////////////////////
// COptimisedRenderer
class ATL_NO_VTABLE COptimisedRenderer : 
  public CComObjectRootEx<CComSingleThreadModel>,
  public CComCoClass<COptimisedRenderer, &CLSID_OptimisedRenderer>,
  public IOptimisedRenderer,
  public IFeatureRenderer,
  public ICommand
  {
public:
  COptimisedRenderer()
  {
    m_bDisplayTime=VARIANT_FALSE;
    m_bUseFeatureDraw=VARIANT_FALSE;
  }

DECLARE_REGISTRY_RESOURCEID(IDR_OPTIMISEDRENDERER)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(COptimisedRenderer)
  COM_INTERFACE_ENTRY(IOptimisedRenderer)
  COM_INTERFACE_ENTRY(IFeatureRenderer)
  COM_INTERFACE_ENTRY(ICommand)
END_COM_MAP()

BEGIN_CATEGORY_MAP(COptimisedRenderer)
  IMPLEMENTED_CATEGORY(CATID_MxCommands)
END_CATEGORY_MAP()

public:
// IOptimisedRenderer  
  STDMETHOD(putref_Application)(/*[in]*/ IUnknown* newVal);
  STDMETHOD(get_UseFeatureDraw)(/*[out, retval]*/ VARIANT_BOOL *pVal);
  STDMETHOD(put_UseFeatureDraw)(/*[in]*/ VARIANT_BOOL newVal);
  STDMETHOD(get_DisplayTime)(/*[out, retval]*/ VARIANT_BOOL *pVal);
  STDMETHOD(put_DisplayTime)(/*[in]*/ VARIANT_BOOL newVal);
  STDMETHOD(putref_FillSymbol)(/*[in]*/ IUnknown* pUnk);
  STDMETHOD(putref_MarkerSymbol)(/*[in]*/ IUnknown* pUnk);
  STDMETHOD(putref_LineSymbol)(/*[in]*/ IUnknown* pUnk);

// IFeatureRenderer
  STDMETHOD(CanRender)(IFeatureClass * featClass, IDisplay * Display, VARIANT_BOOL * result);
  STDMETHOD(PrepareFilter)(IFeatureClass * fc, IQueryFilter * QueryFilter);
  STDMETHOD(Draw)(IFeatureCursor * Cursor, esriDrawPhase drawPhase, IDisplay * Display, ITrackCancel * trackCancel);
  STDMETHOD(get_SymbolByFeature)(IFeature * Feature, ISymbol * * Symbol);
  STDMETHOD(get_RenderPhase)(esriDrawPhase drawPhase, VARIANT_BOOL * result);
  STDMETHOD(putref_ExclusionSet)(IFeatureIDSet * );
// ICommand
  STDMETHOD(get_Enabled)(VARIANT_BOOL * Enabled);
  STDMETHOD(get_Checked)(VARIANT_BOOL * Checked);
  STDMETHOD(get_Name)(BSTR * Name);
  STDMETHOD(get_Caption)(BSTR * Caption);
  STDMETHOD(get_Tooltip)(BSTR * Tooltip);
  STDMETHOD(get_Message)(BSTR * Message);
  STDMETHOD(get_HelpFile)(BSTR * HelpFile);
  STDMETHOD(get_HelpContextID)(LONG * helpID);
  STDMETHOD(get_Bitmap)(OLE_HANDLE * Bitmap);
  STDMETHOD(get_Category)(BSTR * categoryName);
  STDMETHOD(OnCreate)(IDispatch * hook);
  STDMETHOD(OnClick)();

private:
  ISymbolPtr              m_ipSymbol;
  ISimpleMarkerSymbolPtr  m_ipMarkerSymbol;
  ISimpleLineSymbolPtr    m_ipLineSymbol;
  ISimpleFillSymbolPtr    m_ipFillSymbol;
  IFeatureIDSetPtr        m_ipExclusionSet;
  IApplicationPtr          m_ipApp;

  VARIANT_BOOL            m_bDisplayTime;
  VARIANT_BOOL            m_bUseFeatureDraw;
};

#endif //__OPTIMISEDRENDERER_H_