//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1999 - 1999 // // File: DsplMgr2.h // //-------------------------------------------------------------------------- // DsplMgr2.h : Declaration of the CDsplMgr2 #ifndef __DSPLMGR2_H_ #define __DSPLMGR2_H_ //#include "taskpad.h" #include "resource.h" // main symbols using namespace ATL; #define DISPLAY_MANAGER_WALLPAPER 1 #define DISPLAY_MANAGER_PATTERN 2 #define DISPLAY_MANAGER_PATTERN_CHILD 3 #define IDM_CENTER 1 #define IDM_TILE 2 #define IDM_STRETCH 3 #define IDM_CUSTOMPAD 4 #define IDM_TASKPAD 5 #define IDM_TASKPAD_LISTVIEW 6 #define IDM_DEFAULT_LISTVIEW 7 #define IDM_DELETECHILDREN 8 #define IDM_RENAMEROOT 9 #define IDM_TASKPAD_WALLPAPER_OPTIONS 10 #define IDM_CHANGEICON 11 #define IDM_RENAMEWALL 12 #define IDM_PRELOAD 13 #define IDM_CONSOLEVERB 14 class CComponent; struct lParamWallpaper { OLECHAR filename[MAX_PATH]; }; LPOLESTR CoTaskDupString (LPOLESTR szString); ///////////////////////////////////////////////////////////////////////////// // CDsplMgr2 class ATL_NO_VTABLE CDsplMgr2 : public CComObjectRootEx, public CComCoClass, public IPersistStream, public IComponentData { public: CDsplMgr2(); ~CDsplMgr2(); DECLARE_REGISTRY_RESOURCEID(IDR_DSPLMGR2) DECLARE_NOT_AGGREGATABLE(CDsplMgr2) BEGIN_COM_MAP(CDsplMgr2) COM_INTERFACE_ENTRY(IComponentData) COM_INTERFACE_ENTRY(IPersistStream) END_COM_MAP() // IComponentData interface members public: STDMETHOD(Initialize)(LPUNKNOWN pUnknown); STDMETHOD(CreateComponent)(LPCOMPONENT* ppComponent); STDMETHOD(Notify)(LPDATAOBJECT lpDataObject, MMC_NOTIFY_TYPE event, long arg, long param); STDMETHOD(Destroy)(); STDMETHOD(QueryDataObject)(long cookie, DATA_OBJECT_TYPES type, LPDATAOBJECT* ppDataObject); STDMETHOD(GetDisplayInfo)(SCOPEDATAITEM* pScopeDataItem); STDMETHOD(CompareObjects)(LPDATAOBJECT lpDataObjectA, LPDATAOBJECT lpDataObjectB); // IPersistStream interface members STDMETHOD(GetClassID)(CLSID *pClassID); STDMETHOD(IsDirty)(); STDMETHOD(Load)(IStream *pStream); STDMETHOD(Save)(IStream *pStream, BOOL fClearDirty); STDMETHOD(GetSizeMax)(ULARGE_INTEGER *pcbSize); public: long GetViewMode () { return m_ViewMode; } void SetViewMode (long vm) { m_ViewMode = vm; } HSCOPEITEM GetRoot () { return m_rootscopeitem; } HSCOPEITEM GetWallPaperNode () { return m_WallPaperNodeID; } BOOL GetPreload () { return m_bPreload; } void myDeleteItem (HSCOPEITEM hsi, BOOL fDeleteThis) { m_lpIConsoleNameSpace->DeleteItem (hsi, fDeleteThis); } void myRenameItem (HSCOPEITEM hsi, LPOLESTR szName); void myChangeIcon (void); void myPreLoad (void); private: HRESULT OnExpand (LPDATAOBJECT pDataObject, long arg, long param); private: IConsole * m_lpIConsole; IConsoleNameSpace * m_lpIConsoleNameSpace; IImageList * m_lpIImageList; long m_ViewMode; ATL::CComObject * m_pComponent; HSCOPEITEM m_rootscopeitem; HSCOPEITEM m_patternscopeitem; HSCOPEITEM m_WallPaperNodeID; // 0 == unexpanded... BOOL m_toggle; BOOL m_bPreload; }; class CEnumTasks : public IEnumTASK { public: CEnumTasks(); ~CEnumTasks(); public: // IUnknown implementation STDMETHOD(QueryInterface) (REFIID riid, LPVOID FAR* ppvObj); STDMETHOD_(ULONG, AddRef) (); STDMETHOD_(ULONG, Release) (); private: ULONG m_refs; public: // IEnumTASKS implementation STDMETHOD(Next) (ULONG celt, MMC_TASK *rgelt, ULONG *pceltFetched); STDMETHOD(Skip) (ULONG celt); STDMETHOD(Reset)(); STDMETHOD(Clone)(IEnumTASK **ppenum); private: ULONG m_index; public: HRESULT Init (IDataObject * pdo, LPOLESTR szTaskGroup); private: void GetBitmaps (void); HRESULT EnumBitmaps (ULONG celt, MMC_TASK *rgelt, ULONG *pceltFetched); HRESULT EnumOptions (ULONG celt, MMC_TASK *rgelt, ULONG *pceltFetched); private: int m_type; // task grouping mechanism TCHAR * m_bmps; }; class CDataObject: public IDataObject, public CComObjectRoot { public: // ATL Maps DECLARE_NOT_AGGREGATABLE(CDataObject) BEGIN_COM_MAP(CDataObject) COM_INTERFACE_ENTRY(IDataObject) END_COM_MAP() private: CDataObject() {}; public: CDataObject(long cookie, DATA_OBJECT_TYPES type); ~CDataObject(); // // IUnknown overrides // STDMETHOD(QueryInterface) (REFIID riid, LPVOID FAR* ppvObj); STDMETHOD_(ULONG, AddRef) (); STDMETHOD_(ULONG, Release) (); // // IDataObject overrides // STDMETHOD(GetDataHere) (FORMATETC *pformatetc, STGMEDIUM *pmedium); // Not Implemented private: STDMETHOD(GetData)(LPFORMATETC lpFormatetcIn, LPSTGMEDIUM lpMedium) { return E_NOTIMPL; }; STDMETHOD(EnumFormatEtc)(DWORD dwDirection, LPENUMFORMATETC* ppEnumFormatEtc) { return E_NOTIMPL; }; STDMETHOD(QueryGetData)(LPFORMATETC lpFormatetc) { return E_NOTIMPL; }; STDMETHOD(GetCanonicalFormatEtc)(LPFORMATETC lpFormatetcIn, LPFORMATETC lpFormatetcOut) { return E_NOTIMPL; }; STDMETHOD(SetData)(LPFORMATETC lpFormatetc, LPSTGMEDIUM lpMedium, BOOL bRelease) { return E_NOTIMPL; }; STDMETHOD(DAdvise)(LPFORMATETC lpFormatetc, DWORD advf, LPADVISESINK pAdvSink, LPDWORD pdwConnection) { return E_NOTIMPL; }; STDMETHOD(DUnadvise)(DWORD dwConnection) { return E_NOTIMPL; }; STDMETHOD(EnumDAdvise)(LPENUMSTATDATA* ppEnumAdvise) { return E_NOTIMPL; }; public: // my methods long GetCookie () { return m_cookie; } DATA_OBJECT_TYPES GetType () { return m_type; } void SetPreload (BOOL b) { m_bPreload = b; } private: ULONG m_ref; // object reference counter long m_cookie; DATA_OBJECT_TYPES m_type; BOOL m_bPreload; /* ULONG m_cRefs; // object refcount ULONG m_ulCookie; // what this obj refers to DATA_OBJECT_TYPES m_Context; // context in which this was created COOKIETYPE m_Type; // how to interpret _ulCookie CComponentData *m_pcd; // NULL if created by csnapin */ public: static UINT s_cfInternal; // Our custom clipboard format static UINT s_cfDisplayName; // Our test for a node static UINT s_cfNodeType; static UINT s_cfSnapinClsid; static UINT s_cfSnapinPreloads; }; class CComponent: public IExtendTaskPad, public IComponent, public IExtendContextMenu, public CComObjectRoot { public: // ATL Maps DECLARE_NOT_AGGREGATABLE(CComponent) BEGIN_COM_MAP(CComponent) COM_INTERFACE_ENTRY(IComponent) COM_INTERFACE_ENTRY(IExtendTaskPad) COM_INTERFACE_ENTRY(IExtendContextMenu) END_COM_MAP() CComponent(); ~CComponent(); // // IComponent interface members // STDMETHOD(Initialize) (LPCONSOLE lpConsole); STDMETHOD(Notify) (LPDATAOBJECT lpDataObject, MMC_NOTIFY_TYPE event, long arg, long param); STDMETHOD(Destroy) (long cookie); STDMETHOD(GetResultViewType) (long cookie, LPOLESTR* ppViewType, long* pViewOptions); STDMETHOD(QueryDataObject) (long cookie, DATA_OBJECT_TYPES type, LPDATAOBJECT* ppDataObject); STDMETHOD(GetDisplayInfo) (RESULTDATAITEM* pResultDataItem); STDMETHOD(CompareObjects) (LPDATAOBJECT lpDataObjectA, LPDATAOBJECT lpDataObjectB); // IExtendContextMenu STDMETHOD(AddMenuItems)(LPDATAOBJECT pDataObject, LPCONTEXTMENUCALLBACK pCallbackUnknown, long *pInsertionAllowed); STDMETHOD(Command)(long nCommandID, LPDATAOBJECT pDataObject); // IExtendTaskPad interface members STDMETHOD(TaskNotify )(IDataObject * pdo, VARIANT * pvarg, VARIANT * pvparam); STDMETHOD(GetTitle )(LPOLESTR szGroup, LPOLESTR * szTitle); STDMETHOD(GetDescriptiveText)(LPOLESTR szGroup, LPOLESTR * szText); STDMETHOD(GetBackground )(LPOLESTR szGroup, MMC_TASK_DISPLAY_OBJECT * pTDO); STDMETHOD(EnumTasks )(IDataObject * pdo, BSTR szTaskGroup, IEnumTASK** ppEnumTASK); STDMETHOD(GetListPadInfo )(LPOLESTR szGroup, MMC_LISTPAD_INFO * pListPadInfo); // public void SetComponentData (CDsplMgr2 * pComponentData) { m_pComponentData = pComponentData; } long GetViewMode (); private: IResultData * m_pResultData; IHeaderCtrl * m_pHeaderCtrl; CDsplMgr2 * m_pComponentData; // the guy who created me UINT m_IsTaskPad; // IDM_CUSTOMPAD or IDM_TASKPAD LPCONSOLE m_pConsole; // from MMC long m_TaskPadCount; BOOL m_toggle; BOOL m_toggleEntry; // test "Change..." button private: HRESULT OnShow (LPDATAOBJECT pDataObject, long arg, long param); HRESULT OnAddImages (LPDATAOBJECT pDataObject, long arg, long param); HRESULT OnDblClick (LPDATAOBJECT pDataObject, long arg, long param); HRESULT OnViewChange (LPDATAOBJECT pDataObject, long arg, long param); HRESULT OnListPad (LPDATAOBJECT pDataObject, long arg, long param); HRESULT OnRestoreView(LPDATAOBJECT pDataObject, long arg, long param); void TestConsoleVerb(void); }; LPOLESTR CoTaskDupString (LPOLESTR szString); void CoTaskFreeString (LPOLESTR szString); #endif //__DSPLMGR2_H_