|
|
#ifndef __IEMYPICS_H_
#define __IEMYPICS_H_
// other constants:
#define MP_BMP_CX 16 // bitmap size
#define MP_BMP_CY 16
#define MP_NUM_TBBUTTONS 4 // number buttons
#define MP_NUM_TBBITMAPS 4
#define MP_MIN_CX 114 // minimum x size of toolbar
#define MP_MIN_CY 28 // minimum y size of toolbar
#define MP_MIN_SIZE 200 // minimum square size in pixels for hoverbar to appear
#define MP_HOVER_OFFSET 10 // offset +x +y from (x,y) of image's upper lefthand corner
#define MP_TIMER 700 // time in milliseconds to delay on the mouseover/out events
#define MP_SCROLLBAR_SIZE GetSystemMetrics(SM_CXVSCROLL) // size of the scrollbars in pixels
// e-mail picture stuff called via ITridentService2
HRESULT DropOnMailRecipient(IDataObject *pdtobj, DWORD grfKeyState); HRESULT CreateShortcutSetSiteAndGetDataObjectIfPIDLIsNetUrl(LPCITEMIDLIST pidl, IUnknown *pUnkSite, IUniformResourceLocator **ppUrlOut, IDataObject **ppdtobj); HRESULT SendDocToMailRecipient(LPCITEMIDLIST pidl, UINT uiCodePage, DWORD grfKeyState, IUnknown *pUnkSite);
// need this to get scroll event, it lives in iforms.cpp...
void Win3FromDoc2(IHTMLDocument2 *pDoc2, IHTMLWindow3 **ppWin3);
// well, yeah.
BOOL MP_IsEnabledInRegistry(); BOOL MP_IsEnabledInIEAK(); DWORD MP_GetFilterInfoFromRegistry();
// EventSink Callback Class (glorified array)...
class CMyPicsEventSinkCallback { public: typedef enum { EVENT_BOGUS = 100, EVENT_MOUSEOVER = 0, EVENT_MOUSEOUT, EVENT_SCROLL, EVENT_RESIZE } EVENTS;
typedef struct { EVENTS Event; LPCWSTR pwszEventSubscribe; LPCWSTR pwszEventName; } EventSinkEntry;
virtual HRESULT HandleEvent(IHTMLElement *pEle, EVENTS Event, IHTMLEventObj *pEventObj) = 0;
static EventSinkEntry EventsToSink[]; };
class CMyPics : public CMyPicsEventSinkCallback { long m_cRef;
public: class CEventSink; CMyPics(); ~CMyPics();
// IUnknown...
virtual STDMETHODIMP QueryInterface(REFIID, void **); virtual ULONG __stdcall AddRef(); virtual ULONG __stdcall Release();
// CMyPicsEventSinkCallback...
HRESULT HandleEvent(IHTMLElement *pEle, EVENTS Event, IHTMLEventObj *pEventObj);
HRESULT Init(IHTMLDocument2 *pDoc2);
HRESULT UnInit();
static HRESULT GetName(IHTMLInputTextElement *pTextEle, BSTR *pbstrName);
static BOOL IsAdminRestricted(LPCTSTR pszRegVal);
typedef HRESULT (*PFN_ENUM_CALLBACK)(IDispatch *pDispEle, DWORD_PTR dwCBData);
BOOL IsOff();
static VOID CALLBACK s_TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
void IsGalleryMeta(BOOL bFlag);
protected:
// Methods for managing the Hover bar
HRESULT CreateHover(); HRESULT DestroyHover(); HRESULT HideHover(); HRESULT ShowHover();
// Event handlers
HRESULT HandleScroll(); HRESULT HandleMouseout(); HRESULT HandleMouseover(IHTMLElement *pEle); HRESULT HandleResize(); static LRESULT CALLBACK s_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
LRESULT CALLBACK DisableWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
BOOL ShouldAppearOnThisElement(IHTMLElement *pEle);
HRESULT GetRealCoords(IHTMLElement2 *pEle2, HWND hwnd, LONG *plLeft, LONG *plTop, LONG *plRight, LONG *plBottom);
IHTMLElement *GetIMGFromArea(IHTMLElement *pEleIn, POINT ptEvent);
private: // CMyPics member variables
CEventSink *m_pSink; // Floating Toolbar stuff...
HWND m_Hwnd, // Hwnd for the m_pdoc2
m_hWndHover, // Hover rebar thing
m_hWndMyPicsToolBar; // Toolbar that lives in the hover thing
UINT m_hoverState; // Current state of the HoverBar thing
UINT_PTR m_uidTimer; // The Timer
WNDPROC m_wndprocOld; // For stuff
HIMAGELIST m_himlHover; // For the image list
HIMAGELIST m_himlHoverHot; // for the hot images
// Useful stuff for the attached document
IHTMLDocument2 *m_pDoc2; IHTMLElement *m_pEleCurr; // current element we are hovering over
IHTMLWindow3 *m_pWin3; // for unsinking scroll event
EVENTS m_eventsCurr; // event currently being processed
BOOL m_bIsOffForSession : 1; // have we disabled feature for this session?
BOOL m_bGalleryMeta : 1; // TRUE if there was a META tag disabling image bar for this doc
BOOL m_bGalleryImg : 1; // TRUE if the current element has a galleryimg value set to TRUE
public:
// Sinks regular Trident events. Calls back via CMyPicsEventSinkCallback...
class CEventSink : public IDispatch { ULONG m_cRef;
public:
CEventSink(CMyPicsEventSinkCallback *pParent); ~CEventSink();
HRESULT SinkEvents(IHTMLElement2 *pEle2, int iNum, EVENTS *pEvents); HRESULT UnSinkEvents(IHTMLElement2 *pEle2, int iNum, EVENTS *pEvents); HRESULT SinkEvents(IHTMLWindow3 *pWin3, int iNum, EVENTS *pEvents); HRESULT UnSinkEvents(IHTMLWindow3 *pWin3, int iNum, EVENTS *pEvents);
void SetParent(CMyPicsEventSinkCallback *pParent) { m_pParent = pParent; }
STDMETHODIMP QueryInterface(REFIID, void **); STDMETHODIMP_(ULONG) AddRef(void); STDMETHODIMP_(ULONG) Release(void);
// IDispatch
STDMETHODIMP GetTypeInfoCount(UINT* pctinfo); STDMETHODIMP GetTypeInfo(UINT iTInfo, LCID lcid, ITypeInfo** ppTInfo); STDMETHODIMP GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames, LCID lcid, DISPID *rgDispId); STDMETHODIMP Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags, DISPPARAMS *pDispParams, VARIANT *pVarResult, EXCEPINFO *pExcepInfo, UINT *puArgErr);
private: CMyPicsEventSinkCallback *m_pParent; };
};
#endif //__IEMYPICS_H_
|