|
|
// 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<CComSingleThreadModel>, public CComCoClass<CThumbCtl, &CLSID_ThumbCtl>, public CComControl<CThumbCtl>, public IDispatchImpl<IThumbCtl, &IID_IThumbCtl, &LIBID_WEBVWLib>, public IProvideClassInfo2Impl<&CLSID_ThumbCtl, NULL, &LIBID_WEBVWLib>, public IPersistStreamInitImpl<CThumbCtl>, public IPersistStorageImpl<CThumbCtl>, public IQuickActivateImpl<CThumbCtl>, public IOleControlImpl<CThumbCtl>, public IOleObjectImpl<CThumbCtl>, public IOleInPlaceActiveObjectImpl<CThumbCtl>, public IViewObjectExImpl<CThumbCtl>, public IOleInPlaceObjectWindowlessImpl<CThumbCtl>, public IDataObjectImpl<CThumbCtl>, public ISupportErrorInfo, public ISpecifyPropertyPagesImpl<CThumbCtl>, public IObjectSafetyImpl<CThumbCtl, INTERFACESAFE_FOR_UNTRUSTED_CALLER>, public IConnectionPointImpl<CThumbCtl, &DIID_DThumbCtlEvents>, public IConnectionPointContainerImpl<CThumbCtl> { 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_
|