Windows-Server-2003/shell/shdocvw/airesize.h

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_