//+------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1994 - 1999 // // File: ocxcaching.h // // Contents: Classes that implement OCX caching snapin using the framework. // //-------------------------------------------------------------------- #ifndef _OCXCACHING_H_ #define _OCXCACHING_H_ // Forward declarations. class COCXContainer; //+------------------------------------------------------------------- // // Class: COCXCachingSnapinRootItem // // Purpose: Implements the root item for a standalone snapin. // //-------------------------------------------------------------------- class COCXCachingSnapinRootItem : public CBaseSnapinItem { typedef CBaseSnapinItem super; // Used by CBaseSnapinItem::ScCreateItem, connect this item with its children. typedef CComObject > t_item; typedef CComObject > t_itemChild; // Who is my child? public: COCXCachingSnapinRootItem( void ) {} // Raw constructor - use only for static item. virtual ~COCXCachingSnapinRootItem( void ) {} BEGIN_COM_MAP(COCXCachingSnapinRootItem) COM_INTERFACE_ENTRY(IDataObject) // Cant have empty map so add IDataObject END_COM_MAP() protected: // Item tree related information // node type related information virtual const CNodeType* Pnodetype( void ) { return &nodetypeSampleRoot;} // the display name of the item virtual const tstring* PstrDisplayName( void ) { return &m_strDisplayName;} // Get ListView data (GetDisplayInfo calls this). virtual SC ScGetField(DAT dat, tstring& strField); // Image list information virtual LONG Iconid() { return m_uIconIndex; } virtual LONG OpenIconid() { return m_uIconIndex; } virtual BOOL FIsContainer( void ) { return TRUE; } // Context menu support virtual SnapinMenuItem *Pmenuitem(void); virtual INT CMenuItem(void); virtual SC ScCommand(long nCommandID, CComponent *pComponent = NULL); virtual DWORD DwFlagsMenuChecked(void) { return TRUE;} public: virtual SC ScInit(CBaseSnapin *pSnapin, CColumnInfoEx *pcolinfoex = NULL, INT ccolinfoex = 0, BOOL fIsRoot = FALSE); public: // Creates children for the node virtual SC ScCreateChildren( void ); protected: tstring m_strDisplayName; UINT m_uIconIndex; // For context menus static SnapinMenuItem s_rgmenuitem[]; static INT s_cmenuitem; }; //+------------------------------------------------------------------- // // Class: COCXContainer // // Purpose: Implements a scope pane item. // //-------------------------------------------------------------------- class COCXContainer : public CBaseSnapinItem { typedef CBaseSnapinItem super; // Used by CBaseSnapinItem::ScCreateItem, connect this item with its children. typedef CComObject > t_item; // If we cache OCX's then it should be cached per IComponent. But this CBaseSnapinItem based // container is per snapin (not per IComponent) so we use a map to store the per IComponent OCX. typedef std::map CachedOCXs; public: COCXContainer( void ) {} virtual ~COCXContainer( void ) {} BEGIN_COM_MAP(COCXContainer) COM_INTERFACE_ENTRY(IDataObject) // Cant have empty map so add IDataObject END_COM_MAP() protected: // Item tree related information // node type related information const CNodeType *Pnodetype( void ) { return &nodetypeSampleLVContainer;} // the display name of the item virtual const tstring* PstrDisplayName( void ) { return &m_strDisplayName;} // Get ListView data (GetDisplayInfo calls this). virtual SC ScGetField(DAT dat, tstring& strField); // Image list information virtual LONG Iconid() { return m_uIconIndex; } virtual LONG OpenIconid() { return m_uIconIndex; } // This item attributes. virtual BOOL FIsContainer( void ) { return TRUE; } virtual BOOL FUsesResultList() { return FALSE;} virtual BOOL FResultPaneIsOCX() { return TRUE; } virtual SC ScGetOCXCLSID(tstring& strclsidOCX) { strclsidOCX = m_strOCX; return S_OK;} virtual BOOL FAllowMultiSelectionForChildren() { return FALSE;} virtual SC ScInitOCX(LPUNKNOWN pUnkOCX, IConsole* pConsole); virtual BOOL FCacheOCX(); virtual IUnknown* GetCachedOCX(IConsole* pConsole); // There is no list-view so following methods are empty. virtual SC ScInitializeResultView(CComponent *pComponent) { return S_OK;} virtual SC ScOnAddImages(IImageList* ipResultImageList) { return S_OK;} public: virtual SC ScInit(CBaseSnapin *pSnapin, CColumnInfoEx *pcolinfoex = NULL, INT ccolinfoex = 0, BOOL fIsRoot = FALSE); public: // Creates children for the node virtual SC ScCreateChildren( void ); static SC ScCreateLVContainer(CBaseSnapinItem *pitemParent, CBaseSnapinItem *pitemPrevious, COCXContainer ** ppitem, BOOL fNew); void SetOCXGUID(LPCTSTR szGUID) { m_strOCX = szGUID;} protected: // virtual SC ScGetVerbs(DWORD * pdwVerbs); protected: tstring m_strDisplayName; UINT m_uIconIndex; CachedOCXs m_mapOCXs; tstring m_strOCX; }; //+------------------------------------------------------------------- // // Class: COCXCachingSnapin // // Purpose: Implements a snapin. // //-------------------------------------------------------------------- class COCXCachingSnapin : public CBaseSnapin { // Specify the root node of the snapin. typedef CComObject > t_itemRoot; SNAPIN_DECLARE(COCXCachingSnapin); public: COCXCachingSnapin(); virtual ~COCXCachingSnapin(); // information about the snapin and root (ie initial) node virtual BOOL FStandalone() { return TRUE; } virtual BOOL FIsExtension() { return FALSE; } virtual BOOL FSupportsIComponent2() {return TRUE;} virtual LONG IdsDescription(void) {return IDS_OCXCachingRoot;} virtual LONG IdsName(void) {return IDS_OCXCachingSnapin;} const CSnapinInfo* Psnapininfo() { return &snapininfoOCXCaching; } bool FCacheOCX() { return m_bCacheOCX;} void SetCacheOCX(bool b) { m_bCacheOCX = b;} protected: // The column header info structures. static CColumnInfoEx s_colinfo[]; static INT s_colwidths[]; static INT s_ccolinfo; bool m_bCacheOCX; protected: virtual CColumnInfoEx* Pcolinfoex(INT icolinfo=0) { return s_colinfo + icolinfo; } virtual INT &ColumnWidth(INT icolwidth=0) { return s_colwidths[icolwidth]; } virtual INT Ccolinfoex() { return s_ccolinfo; } }; #endif