You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
5.5 KiB
154 lines
5.5 KiB
// 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_
|