// ThumbCtl.h : Declaration of the CThumbCtl #ifndef __THUMBCTL_H_ #define __THUMBCTL_H_ #define WM_HTML_BITMAP (WM_USER + 100) EXTERN_C const CLSID CLSID_ThumbCtlOld; // retired from service ///////////////////////////////////////////////////////////////////////////// // CThumbCtl class ATL_NO_VTABLE CThumbCtl : public CComObjectRootEx, public CComCoClass, public CComControl, public IDispatchImpl, public IProvideClassInfo2Impl<&CLSID_ThumbCtl, NULL, &LIBID_WEBVWLib>, public IPersistStreamInitImpl, public IPersistStorageImpl, public IQuickActivateImpl, public IOleControlImpl, public IOleObjectImpl, public IOleInPlaceActiveObjectImpl, public IViewObjectExImpl, public IOleInPlaceObjectWindowlessImpl, public IDataObjectImpl, public ISupportErrorInfo, public ISpecifyPropertyPagesImpl, public IObjectSafetyImpl, public IConnectionPointImpl, public IConnectionPointContainerImpl { public: // === INTERFACE === // *** IThumbCtl *** STDMETHOD(displayFile)(BSTR bsFileName, VARIANT_BOOL *); STDMETHOD(haveThumbnail)(VARIANT_BOOL *); STDMETHOD(get_freeSpace)(BSTR *); STDMETHOD(get_usedSpace)(BSTR *); STDMETHOD(get_totalSpace)(BSTR *); // ATL Functions // Drawing function HRESULT OnDraw(ATL_DRAWINFO& di); DECLARE_REGISTRY_RESOURCEID(IDR_THUMBCTL) BEGIN_COM_MAP(CThumbCtl) COM_INTERFACE_ENTRY(IThumbCtl) COM_INTERFACE_ENTRY(IDispatch) COM_INTERFACE_ENTRY(IObjectSafety) COM_INTERFACE_ENTRY_IMPL(IViewObjectEx) COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject2, IViewObjectEx) COM_INTERFACE_ENTRY_IMPL_IID(IID_IViewObject, IViewObjectEx) COM_INTERFACE_ENTRY_IMPL(IOleInPlaceObjectWindowless) COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleInPlaceObject, IOleInPlaceObjectWindowless) COM_INTERFACE_ENTRY_IMPL_IID(IID_IOleWindow, IOleInPlaceObjectWindowless) COM_INTERFACE_ENTRY_IMPL(IOleInPlaceActiveObject) COM_INTERFACE_ENTRY_IMPL(IOleControl) COM_INTERFACE_ENTRY_IMPL(IOleObject) COM_INTERFACE_ENTRY_IMPL(IQuickActivate) COM_INTERFACE_ENTRY_IMPL(IPersistStorage) COM_INTERFACE_ENTRY_IMPL(IPersistStreamInit) COM_INTERFACE_ENTRY_IMPL(ISpecifyPropertyPages) COM_INTERFACE_ENTRY_IMPL(IDataObject) COM_INTERFACE_ENTRY(IProvideClassInfo) COM_INTERFACE_ENTRY(IProvideClassInfo2) COM_INTERFACE_ENTRY(ISupportErrorInfo) COM_INTERFACE_ENTRY_IMPL(IConnectionPointContainer) END_COM_MAP() BEGIN_CONNECTION_POINT_MAP(CThumbCtl) CONNECTION_POINT_ENTRY(DIID_DThumbCtlEvents) END_CONNECTION_POINT_MAP() BEGIN_PROPERTY_MAP(CThumbCtl) END_PROPERTY_MAP() BEGIN_MSG_MAP(CThumbCtl) MESSAGE_HANDLER(WM_PAINT, OnPaint) MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus) MESSAGE_HANDLER(WM_KILLFOCUS, OnKillFocus) END_MSG_MAP() // *** IObjectSafety *** STDMETHOD(GetInterfaceSafetyOptions)(REFIID riid, DWORD *pdwSupportedOptions, DWORD *pdwEnabledOptions); // *** ISupportsErrorInfo *** STDMETHOD(InterfaceSupportsErrorInfo)(REFIID riid); // *** IViewObjectEx *** STDMETHOD(GetViewStatus)(DWORD* pdwStatus); // *** IOleInPlaceActiveObject *** virtual STDMETHODIMP TranslateAccelerator(LPMSG pMsg); public: // === PUBLIC FUNCTIONS === CThumbCtl(void); ~CThumbCtl(void); private: // === PRIVATE DATA === BOOL m_fRootDrive; // Do we have a root drive? (if so, display pie chart) BOOL m_fTabRecieved; // To avoid re-entrant calls // thumbnail BOOL m_fInitThumb; // Have we called the setup IThumbnail yet? BOOL m_fHaveIThumbnail; // success of SetupIThumbnail() (only call it once) IThumbnail *m_pthumb; // File to bitmap convertor interface HWND m_hwnd; // invisible window used to receive WM_HTML_BITMAP message HBITMAP m_hbm; // latest calculated bitmap; NULL if have no bitmap DWORD m_dwThumbnailID; // ID to identify which bitmap we received // root drive enum { PIE_USEDCOLOR = 0, PIE_FREECOLOR, PIE_USEDSHADOW, PIE_FREESHADOW, PIE_NUM // keep track of number of PIE_ values }; DWORDLONG m_dwlFreeSpace; DWORDLONG m_dwlUsedSpace; DWORDLONG m_dwlTotalSpace; DWORD m_dwUsedSpacePer1000; // amount of used space /1000 COLORREF m_acrChartColors[PIE_NUM]; // color scheme BOOL m_fUseSystemColors; // Use system color scheme? // === PRIVATE FUNCTIONS === void InvokeOnThumbnailReady(void); // For the pie-chart drawing routines... HRESULT ComputeFreeSpace(LPTSTR pszFileName); HRESULT get_GeneralSpace(DWORDLONG dwlSpace, BSTR *); HRESULT Draw3dPie(HDC, LPRECT, DWORD dwPer1000, const COLORREF *); // security HRESULT _IsSafe() { return (0==m_dwCurrentSafety) ? S_OK : IsSafePage(m_spClientSite); }; // sets up the thumbnail interface -- must call before use. HRESULT SetupIThumbnail(void); // Window Procedure for catching and storing bitmap static LRESULT CALLBACK WndProc(HWND, UINT uMsg, WPARAM, LPARAM); }; #endif //__THUMBCTL_H_