162 lines
5.6 KiB
C
162 lines
5.6 KiB
C
|
#ifndef __IEAIRESIZE_H_
|
||
|
#define __IEAIRESIZE_H_
|
||
|
|
||
|
#define AIR_SCREEN_CONSTANTY 34 // in pixels (this is a magic number)
|
||
|
#define AIR_SCREEN_CONSTANTX 40 // in pixels (this is a magic number)
|
||
|
#define AIR_TIMER 1400 // time in milliseconds to delay on mouseover/out events
|
||
|
#define AIR_MIN_CX 39 // minimum x size of the button
|
||
|
#define AIR_MIN_CY 38 // minimum y size of the button
|
||
|
#define AIR_NUM_TBBITMAPS 1 // number of bitmaps (only 1 button)
|
||
|
#define AIR_BMP_CX 32 // bitmap size
|
||
|
#define AIR_BMP_CY 32
|
||
|
#define AIR_MIN_BROWSER_SIZE 150 // min size in pixels the browser has to be to display the button
|
||
|
|
||
|
#define AIR_SCROLLBAR_SIZE_V GetSystemMetrics(SM_CXVSCROLL)
|
||
|
#define AIR_SCROLLBAR_SIZE_H GetSystemMetrics(SM_CYHSCROLL)
|
||
|
|
||
|
// used for sinking scroll events:
|
||
|
void Win3FromDoc2(IHTMLDocument2 *pDoc2, IHTMLWindow3 **ppWin3);
|
||
|
DWORD MP_GetOffsetInfoFromRegistry();
|
||
|
|
||
|
|
||
|
// EventSink Callback Class...
|
||
|
class CAutoImageResizeEventSinkCallback
|
||
|
{
|
||
|
public:
|
||
|
typedef enum
|
||
|
{
|
||
|
EVENT_BOGUS = 100,
|
||
|
EVENT_MOUSEOVER = 0,
|
||
|
EVENT_MOUSEOUT,
|
||
|
EVENT_SCROLL,
|
||
|
EVENT_RESIZE,
|
||
|
EVENT_BEFOREPRINT,
|
||
|
EVENT_AFTERPRINT
|
||
|
}
|
||
|
EVENTS;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
EVENTS Event;
|
||
|
LPCWSTR pwszEventSubscribe;
|
||
|
LPCWSTR pwszEventName;
|
||
|
}
|
||
|
EventSinkEntry;
|
||
|
|
||
|
virtual HRESULT HandleEvent(IHTMLElement *pEle, EVENTS Event, IHTMLEventObj *pEventObj) = 0;
|
||
|
|
||
|
static EventSinkEntry EventsToSink[];
|
||
|
};
|
||
|
|
||
|
class CAutoImageResize : public CAutoImageResizeEventSinkCallback
|
||
|
{
|
||
|
long m_cRef;
|
||
|
|
||
|
public:
|
||
|
class CEventSink;
|
||
|
|
||
|
CAutoImageResize();
|
||
|
~CAutoImageResize();
|
||
|
|
||
|
// IUnknown...
|
||
|
virtual STDMETHODIMP QueryInterface(REFIID, void **);
|
||
|
virtual ULONG __stdcall AddRef();
|
||
|
virtual ULONG __stdcall Release();
|
||
|
|
||
|
// CAutoImageResizeEventSinkCallback...
|
||
|
HRESULT HandleEvent(IHTMLElement *pEle, EVENTS Event, IHTMLEventObj *pEventObj);
|
||
|
|
||
|
// Init and UnInit (called from basesb.cpp)
|
||
|
HRESULT Init(IHTMLDocument2 *pDoc2);
|
||
|
HRESULT UnInit();
|
||
|
|
||
|
protected:
|
||
|
|
||
|
// AutoImageResize Stuff
|
||
|
HRESULT DoAutoImageResize();
|
||
|
|
||
|
// Event Handlers
|
||
|
HRESULT HandleMouseover();
|
||
|
HRESULT HandleMouseout();
|
||
|
HRESULT HandleScroll();
|
||
|
HRESULT HandleResize();
|
||
|
HRESULT HandleBeforePrint();
|
||
|
HRESULT HandleAfterPrint();
|
||
|
|
||
|
// Button Functions
|
||
|
HRESULT CreateButton();
|
||
|
HRESULT ShowButton();
|
||
|
HRESULT HideButton();
|
||
|
HRESULT DestroyButton();
|
||
|
|
||
|
// Timer callback function
|
||
|
static VOID CALLBACK s_TimerProc(HWND hwnd, UINT uMsg, UINT_PTR idEvent, DWORD dwTime);
|
||
|
|
||
|
// Button callback function
|
||
|
static LRESULT CALLBACK s_WndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||
|
|
||
|
private:
|
||
|
// CAutoImageResize member variables
|
||
|
CEventSink *m_pSink; // Event Sink
|
||
|
|
||
|
HWND m_hWndButton; // Button hWnd
|
||
|
HWND m_hWndButtonCont;
|
||
|
WNDPROC m_wndProcOld; // Old wind proc for button
|
||
|
HIMAGELIST m_himlButtonShrink; // Shrink image
|
||
|
HIMAGELIST m_himlButtonExpand; // Expand image
|
||
|
|
||
|
UINT m_airState; // Current state of the AutoImageResize feature (image state)
|
||
|
UINT m_airButtonState; // Current state of the AIR Button
|
||
|
UINT m_airUsersLastChoice; // The last state the user put us into by clicking the button
|
||
|
UINT m_airBeforePrintState; // OnAfterPrint uses this to restore state if necessary
|
||
|
|
||
|
POINT m_airOrigSize; // Original x,y dimensions of an image thats been AIR'ed
|
||
|
|
||
|
BOOL m_bWindowResizing; // True when a onresize event for the win3 object fired, but hasn't been processed yet.
|
||
|
|
||
|
// Useful stuff for the attached document
|
||
|
HWND m_hWnd; // Browser hWnd
|
||
|
IHTMLDocument2 *m_pDoc2; // Document pointer
|
||
|
IHTMLElement2 *m_pEle2; // Pointer to the image
|
||
|
IHTMLWindow3 *m_pWin3; // For unsinking scroll event
|
||
|
EVENTS m_eventsCurr; // Event currently being processed
|
||
|
|
||
|
public:
|
||
|
|
||
|
// Sinks regular Trident events. Calls back via CAutoImageResizeEventSinkCallback...
|
||
|
class CEventSink : public IDispatch
|
||
|
{
|
||
|
ULONG m_cRef;
|
||
|
|
||
|
public:
|
||
|
|
||
|
CEventSink(CAutoImageResizeEventSinkCallback *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(CAutoImageResizeEventSinkCallback *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:
|
||
|
CAutoImageResizeEventSinkCallback *m_pParent;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
#endif //__IEAIRESIZE_H_
|