|
|
#ifndef _HTML_H
#define _HTML_H
#include "webvw.h"
interface IHTMLDocument2;
#define DECLAREWAITCURSOR2 HCURSOR hcursor_wait_cursor_save
//
// a class host for trident so that we can control what it downloads
// and what it doesn't...
//
class CTridentHost : public IOleClientSite, public IDispatch, public IDocHostUIHandler { public: CTridentHost(); ~CTridentHost();
HRESULT SetTrident( IOleObject * pTrident );
// IUnknown
STDMETHOD ( QueryInterface )( REFIID riid, void ** ppvObj ); STDMETHOD_( ULONG, AddRef ) ( void ); STDMETHOD_( ULONG, Release ) ( void ); // IDispatch (ambient properties)
STDMETHOD( GetTypeInfoCount ) (UINT *pctinfo); STDMETHOD( GetTypeInfo )(UINT itinfo, LCID lcid, ITypeInfo **pptinfo); STDMETHOD( GetIDsOfNames )(REFIID riid, OLECHAR **rgszNames, UINT cNames, LCID lcid, DISPID *rgdispid); STDMETHOD( Invoke )(DISPID dispidMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pdispparams, VARIANT *pvarResult, EXCEPINFO *pexcepinfo, UINT *puArgErr);
// IOleClientSite
STDMETHOD( SaveObject )(void); STDMETHOD( GetMoniker )(DWORD dwAssign, DWORD dwWhichMoniker, IMoniker **ppmk); STDMETHOD( GetContainer )(IOleContainer **ppContainer); STDMETHOD( ShowObject )(void); STDMETHOD( OnShowWindow )(BOOL fShow); STDMETHOD( RequestNewObjectLayout )(void);
// IDocHostUIHandler
STDMETHOD( ShowContextMenu )( DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved); STDMETHOD( GetHostInfo )( DOCHOSTUIINFO *pInfo); STDMETHOD( ShowUI )( DWORD dwID, IOleInPlaceActiveObject *pActiveObject,IOleCommandTarget *pCommandTarget, IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc); STDMETHOD( HideUI )( void); STDMETHOD( UpdateUI )( void); STDMETHOD( EnableModeless )( BOOL fEnable); STDMETHOD( OnDocWindowActivate )( BOOL fActivate); STDMETHOD( OnFrameWindowActivate )( BOOL fActivate); STDMETHOD( ResizeBorder )( LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow); STDMETHOD( TranslateAccelerator )( LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID); STDMETHOD( GetOptionKeyPath )( LPOLESTR *pchKey, DWORD dw); STDMETHOD( GetDropTarget )( IDropTarget *pDropTarget, IDropTarget **ppDropTarget); STDMETHOD( GetExternal )( IDispatch **ppDispatch); STDMETHOD( TranslateUrl )( DWORD dwTranslate, OLECHAR *pchURLIn, OLECHAR **ppchURLOut); STDMETHOD( FilterDataObject )( IDataObject *pDO, IDataObject **ppDORet);
public: BITBOOL m_fOffline : 1; protected: long m_cRef; };
class CHtmlThumb : public IExtractImage, public IThumbnailCapture, public IRunnableTask, public IPropertyNotifySink, public IPersistFile, public IPersistMoniker, public CComObjectRoot, public CComCoClass< CHtmlThumb,&CLSID_HtmlThumbnailExtractor > { public: CHtmlThumb(); ~CHtmlThumb();
BEGIN_COM_MAP( CHtmlThumb ) COM_INTERFACE_ENTRY( IExtractImage) COM_INTERFACE_ENTRY( IThumbnailCapture ) COM_INTERFACE_ENTRY( IRunnableTask ) COM_INTERFACE_ENTRY( IPropertyNotifySink ) COM_INTERFACE_ENTRY( IPersistFile ) COM_INTERFACE_ENTRY( IPersistMoniker ) END_COM_MAP( )
DECLARE_REGISTRY( CHtmlThumb, _T("Shell.ThumbnailExtract.HTML.1"), _T("Shell.ThumbnailExtract.HTML.1"), IDS_HTMLTHUMBEXTRACT_DESC, THREADFLAGS_APARTMENT);
DECLARE_NOT_AGGREGATABLE( CHtmlThumb );
// IExtractImage
STDMETHOD (GetLocation) ( LPWSTR pszPathBuffer, DWORD cch, DWORD * pdwPriority, const SIZE * prgSize, DWORD dwRecClrDepth, DWORD *pdwFlags ); STDMETHOD (Extract)( HBITMAP * phBmpThumbnail );
// IThumbnailCapture
STDMETHOD (CaptureThumbnail) ( const SIZE * pMaxSize, IUnknown * pHTMLDoc2, HBITMAP * phbmThumbnail );
// IRunnableTask
STDMETHOD (Run)( void ) ; STDMETHOD (Kill)( BOOL fWait ); STDMETHOD (Suspend)( ); STDMETHOD (Resume)( ); STDMETHOD_( ULONG, IsRunning )( void );
// IPropertyNotifySink
STDMETHOD (OnChanged)( DISPID dispID); STDMETHOD (OnRequestEdit) ( DISPID dispID);
// IPersistFile
STDMETHOD (GetClassID )(CLSID *pClassID); STDMETHOD (IsDirty )(); STDMETHOD (Load )( LPCOLESTR pszFileName, DWORD dwMode); STDMETHOD (Save )( LPCOLESTR pszFileName, BOOL fRemember); STDMETHOD (SaveCompleted )( LPCOLESTR pszFileName); STDMETHOD (GetCurFile )( LPOLESTR *ppszFileName);
// IPersistMoniker
STDMETHOD( Load )( BOOL fFullyAvailable, IMoniker *pimkName, LPBC pibc, DWORD grfMode); STDMETHOD( Save )( IMoniker *pimkName, LPBC pbc, BOOL fRemember); STDMETHOD( SaveCompleted )( IMoniker *pimkName, LPBC pibc); STDMETHOD( GetCurMoniker )( IMoniker **ppimkName);
protected: HRESULT InternalResume( void ); HRESULT Create_URL_Moniker( IMoniker **ppMoniker ); HRESULT WaitForRender( void ); HRESULT Finish( HBITMAP * pBmp, const SIZE * prgSize, DWORD dwClrDepth ); HRESULT CheckReadyState( ); void ReportError( void ** pMsgArgs ); LONG m_lState; BOOL m_fAsync; HANDLE m_hDone; CTridentHost m_Host; IHTMLDocument2 * m_pHTML; IOleObject * m_pOleObject; IConnectionPoint * m_pConPt; IViewObject * m_pViewObject; DWORD m_dwTimeout; DWORD m_dwCurrentTick; DWORD m_dwPropNotifyCookie; WCHAR m_szPath[MAX_PATH]; SIZE m_rgSize; HBITMAP * m_phBmp; DWORD m_dwClrDepth; DECLAREWAITCURSOR2; DWORD m_dwXRenderSize; DWORD m_dwYRenderSize; IMoniker * m_pMoniker; };
// time we wait before asking the internet explorer if it is done yet ...
#define TIME_PAUSE 200
// default timeout (seconds)
#define TIME_DEFAULT 90
#endif
|