346 lines
9.9 KiB
C
346 lines
9.9 KiB
C
|
// Copyright (C) Microsoft Corporation 1996-1997, All Rights reserved.
|
||
|
|
||
|
#if _MSC_VER > 1000
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#ifndef _CONTAIN_H_
|
||
|
#define _CONTAIN_H_
|
||
|
|
||
|
#include <servprov.h>
|
||
|
#include <docobj.h>
|
||
|
|
||
|
#ifndef INITGUIDS
|
||
|
#include <olectl.h>
|
||
|
#endif
|
||
|
|
||
|
#include "web.h"
|
||
|
#include "mshtmhst.h"
|
||
|
|
||
|
extern IServiceProvider *g_pExternalHostServiceProvider;
|
||
|
|
||
|
typedef class CIPropertyNotifySink *PIPROPERTYNOTIFYSINK;
|
||
|
typedef class CIOleControlSite *PIOLECONTROLSITE;
|
||
|
|
||
|
class CAutomateContent;
|
||
|
|
||
|
class CDocHostUIHandler : public IDocHostUIHandler
|
||
|
{
|
||
|
private:
|
||
|
ULONG m_cRef;
|
||
|
|
||
|
public:
|
||
|
IUnknown * m_pOuter;
|
||
|
|
||
|
CDocHostUIHandler(IUnknown * pOuter);
|
||
|
STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppv);
|
||
|
STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
STDMETHODIMP_(ULONG) Release(void);
|
||
|
STDMETHODIMP ShowContextMenu(DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved);
|
||
|
STDMETHODIMP GetHostInfo(DOCHOSTUIINFO *pInfo);
|
||
|
STDMETHODIMP ShowUI(DWORD dwID, IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget,
|
||
|
IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc);
|
||
|
STDMETHODIMP HideUI(void);
|
||
|
STDMETHODIMP UpdateUI(void);
|
||
|
STDMETHODIMP EnableModeless(BOOL fEnable);
|
||
|
STDMETHODIMP OnDocWindowActivate(BOOL fActivate);
|
||
|
STDMETHODIMP OnFrameWindowActivate(BOOL fActivate);
|
||
|
STDMETHODIMP ResizeBorder(LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow);
|
||
|
STDMETHODIMP TranslateAccelerator(LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID);
|
||
|
STDMETHODIMP GetOptionKeyPath(LPOLESTR *pchKey, DWORD dw);
|
||
|
STDMETHODIMP GetDropTarget(IDropTarget *pDropTarget, IDropTarget **ppDropTarget);
|
||
|
STDMETHODIMP GetExternal(IDispatch **ppDispatch);
|
||
|
STDMETHODIMP TranslateUrl(DWORD dwTranslate, OLECHAR *pchURLIn, OLECHAR **ppchURLOut);
|
||
|
STDMETHODIMP FilterDataObject(IDataObject *pDO, IDataObject **ppDORet);
|
||
|
};
|
||
|
|
||
|
class CDocHostShowUI : public IDocHostShowUI
|
||
|
{
|
||
|
private:
|
||
|
ULONG m_cRef;
|
||
|
|
||
|
public:
|
||
|
IUnknown * m_pOuter;
|
||
|
|
||
|
CDocHostShowUI(IUnknown * pOuter);
|
||
|
STDMETHODIMP QueryInterface(REFIID riid, LPVOID * ppv);
|
||
|
STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
STDMETHODIMP_(ULONG) Release(void);
|
||
|
|
||
|
STDMETHODIMP ShowHelp( HWND hwnd, LPOLESTR pszHelpFile, UINT uCommand, DWORD dwData, POINT ptMouse, IDispatch* pDispatchObjectHit );
|
||
|
STDMETHODIMP ShowMessage( HWND hwnd, LPOLESTR lpstrText, LPOLESTR lpstrCaption, DWORD dwType, LPOLESTR lpstrHelpFile, DWORD dwHelpContext, LRESULT* plResult );
|
||
|
};
|
||
|
|
||
|
|
||
|
class CIOleItemContainer : public IOleItemContainer
|
||
|
{
|
||
|
private:
|
||
|
ULONG m_cRef;
|
||
|
|
||
|
public:
|
||
|
IUnknown * m_pOuter;
|
||
|
CIOleItemContainer(IUnknown *);
|
||
|
|
||
|
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
|
||
|
STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
STDMETHODIMP_(ULONG) Release(void);
|
||
|
|
||
|
STDMETHODIMP ParseDisplayName(IBindCtx*,LPOLESTR,ULONG*,IMoniker**);
|
||
|
|
||
|
STDMETHODIMP EnumObjects(DWORD,LPENUMUNKNOWN*);
|
||
|
STDMETHODIMP LockContainer(BOOL);
|
||
|
|
||
|
STDMETHODIMP GetObject(LPOLESTR,DWORD,IBindCtx*,REFIID,void**);
|
||
|
STDMETHODIMP GetObjectStorage(LPOLESTR,IBindCtx*,REFIID,void**);
|
||
|
STDMETHODIMP IsRunning(LPOLESTR);
|
||
|
};
|
||
|
|
||
|
class CIOleClientSite : public IOleClientSite
|
||
|
{
|
||
|
protected:
|
||
|
ULONG m_cRef;
|
||
|
class CContainer *m_pContainer;
|
||
|
LPUNKNOWN m_pUnkOuter;
|
||
|
|
||
|
public:
|
||
|
CIOleClientSite(class CContainer *);
|
||
|
~CIOleClientSite(void);
|
||
|
|
||
|
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
|
||
|
STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
STDMETHODIMP_(ULONG) Release(void);
|
||
|
|
||
|
STDMETHODIMP SaveObject(void);
|
||
|
STDMETHODIMP GetMoniker(DWORD, DWORD, LPMONIKER *);
|
||
|
STDMETHODIMP GetContainer(LPOLECONTAINER *);
|
||
|
STDMETHODIMP ShowObject(void);
|
||
|
STDMETHODIMP OnShowWindow(BOOL);
|
||
|
STDMETHODIMP RequestNewObjectLayout(void);
|
||
|
};
|
||
|
|
||
|
typedef CIOleClientSite *PIOLECLIENTSITE;
|
||
|
|
||
|
class CIAdviseSink : public IAdviseSink2
|
||
|
{
|
||
|
protected:
|
||
|
ULONG m_cRef;
|
||
|
class CContainer *m_pContainer;
|
||
|
LPUNKNOWN m_pUnkOuter;
|
||
|
|
||
|
public:
|
||
|
CIAdviseSink(class CContainer *);
|
||
|
~CIAdviseSink(void);
|
||
|
|
||
|
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
|
||
|
STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
STDMETHODIMP_(ULONG) Release(void);
|
||
|
|
||
|
STDMETHODIMP_(void) OnDataChange(LPFORMATETC, LPSTGMEDIUM);
|
||
|
STDMETHODIMP_(void) OnViewChange(DWORD, LONG);
|
||
|
STDMETHODIMP_(void) OnRename(LPMONIKER);
|
||
|
STDMETHODIMP_(void) OnSave(void);
|
||
|
STDMETHODIMP_(void) OnClose(void);
|
||
|
STDMETHODIMP_(void) OnLinkSrcChange(LPMONIKER);
|
||
|
};
|
||
|
|
||
|
|
||
|
typedef CIAdviseSink *PIADVISESINK;
|
||
|
|
||
|
|
||
|
class CIOleInPlaceSite : public IOleInPlaceSite
|
||
|
{
|
||
|
protected:
|
||
|
ULONG m_cRef;
|
||
|
class CContainer *m_pContainer;
|
||
|
|
||
|
public:
|
||
|
LPUNKNOWN m_pUnkOuter;
|
||
|
|
||
|
CIOleInPlaceSite(class CContainer *);
|
||
|
~CIOleInPlaceSite(void);
|
||
|
|
||
|
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
|
||
|
STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
STDMETHODIMP_(ULONG) Release(void);
|
||
|
|
||
|
STDMETHODIMP GetWindow(HWND *);
|
||
|
STDMETHODIMP ContextSensitiveHelp(BOOL);
|
||
|
STDMETHODIMP CanInPlaceActivate(void);
|
||
|
STDMETHODIMP OnInPlaceActivate(void);
|
||
|
STDMETHODIMP OnUIActivate(void);
|
||
|
STDMETHODIMP GetWindowContext(LPOLEINPLACEFRAME *
|
||
|
, LPOLEINPLACEUIWINDOW *, LPRECT, LPRECT
|
||
|
, LPOLEINPLACEFRAMEINFO);
|
||
|
STDMETHODIMP Scroll(SIZE);
|
||
|
STDMETHODIMP OnUIDeactivate(BOOL);
|
||
|
STDMETHODIMP OnInPlaceDeactivate(void);
|
||
|
STDMETHODIMP DiscardUndoState(void);
|
||
|
STDMETHODIMP DeactivateAndUndo(void);
|
||
|
STDMETHODIMP OnPosRectChange(LPCRECT);
|
||
|
};
|
||
|
|
||
|
typedef CIOleInPlaceSite *PIOLEINPLACESITE;
|
||
|
|
||
|
|
||
|
class CIOleInPlaceFrame : public IOleInPlaceFrame
|
||
|
{
|
||
|
protected:
|
||
|
ULONG m_cRef;
|
||
|
class CContainer *m_pContainer;
|
||
|
|
||
|
public:
|
||
|
LPUNKNOWN m_pUnkOuter;
|
||
|
|
||
|
CIOleInPlaceFrame(class CContainer *);
|
||
|
~CIOleInPlaceFrame(void);
|
||
|
|
||
|
STDMETHODIMP QueryInterface (REFIID riid, LPVOID FAR* ppv);
|
||
|
STDMETHODIMP_(ULONG) AddRef ();
|
||
|
STDMETHODIMP_(ULONG) Release ();
|
||
|
|
||
|
STDMETHODIMP GetWindow (HWND FAR* lphwnd);
|
||
|
STDMETHODIMP ContextSensitiveHelp (BOOL fEnterMode);
|
||
|
|
||
|
// *** IOleInPlaceUIWindow methods ***
|
||
|
STDMETHODIMP GetBorder (LPRECT lprectBorder);
|
||
|
STDMETHODIMP RequestBorderSpace (LPCBORDERWIDTHS lpborderwidths);
|
||
|
STDMETHODIMP SetBorderSpace (LPCBORDERWIDTHS lpborderwidths);
|
||
|
//@@WTK WIN32, UNICODE
|
||
|
//STDMETHODIMP SetActiveObject (LPOLEINPLACEACTIVEOBJECT lpActiveObject,LPCSTR lpszObjName);
|
||
|
STDMETHODIMP SetActiveObject (LPOLEINPLACEACTIVEOBJECT lpActiveObject,LPCOLESTR lpszObjName);
|
||
|
|
||
|
// *** IOleInPlaceFrame methods ***
|
||
|
STDMETHODIMP InsertMenus (HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths);
|
||
|
STDMETHODIMP SetMenu (HMENU hmenuShared, HOLEMENU holemenu, HWND hwndActiveObject);
|
||
|
STDMETHODIMP RemoveMenus (HMENU hmenuShared);
|
||
|
//@@WTK WIN32, UNICODE
|
||
|
//STDMETHODIMP SetStatusText (LPCSTR lpszStatusText);
|
||
|
STDMETHODIMP SetStatusText (LPCOLESTR lpszStatusText);
|
||
|
STDMETHODIMP EnableModeless (BOOL fEnable);
|
||
|
STDMETHODIMP TranslateAccelerator (LPMSG lpmsg, WORD wID);
|
||
|
};
|
||
|
|
||
|
class CIOleControlSite : public IOleControlSite
|
||
|
{
|
||
|
protected:
|
||
|
ULONG m_cRef;
|
||
|
class CContainer* m_pContainer;
|
||
|
LPUNKNOWN m_pUnkOuter;
|
||
|
|
||
|
public:
|
||
|
CIOleControlSite(class CContainer *);
|
||
|
~CIOleControlSite(void);
|
||
|
|
||
|
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
|
||
|
STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
STDMETHODIMP_(ULONG) Release(void);
|
||
|
|
||
|
STDMETHODIMP OnControlInfoChanged(void);
|
||
|
STDMETHODIMP LockInPlaceActive(BOOL);
|
||
|
STDMETHODIMP GetExtendedControl(LPDISPATCH *);
|
||
|
STDMETHODIMP TransformCoords(POINTL *, POINTF *, DWORD);
|
||
|
STDMETHODIMP TranslateAccelerator(LPMSG, DWORD);
|
||
|
STDMETHODIMP OnFocus(BOOL);
|
||
|
STDMETHODIMP ShowPropertyFrame(void);
|
||
|
};
|
||
|
|
||
|
typedef CIOleInPlaceFrame *PIOLEINPLACEFRAME;
|
||
|
|
||
|
/***************************************************************************/
|
||
|
|
||
|
class CContainer : public IServiceProvider
|
||
|
{
|
||
|
friend CIOleClientSite;
|
||
|
friend CIAdviseSink;
|
||
|
friend CIOleInPlaceSite;
|
||
|
friend CIOleInPlaceFrame;
|
||
|
|
||
|
//CONTROLMOD
|
||
|
// friend CIOleControlSite;
|
||
|
// friend CIPropertyNotifySink;
|
||
|
//End CONTROLMOD
|
||
|
|
||
|
public:
|
||
|
BOOL m_OleInited;
|
||
|
ULONG m_cRef;
|
||
|
IStorage* m_pIStorage;
|
||
|
LPOLEOBJECT m_pOleObject;
|
||
|
HWND m_hWnd;
|
||
|
BOOL m_bIE4;
|
||
|
|
||
|
//Our interfaces
|
||
|
PIADVISESINK m_pIAdviseSink;
|
||
|
PIOLEINPLACESITE m_pIOleInPlaceSite;
|
||
|
PIOLECLIENTSITE m_pIOleClientSite;
|
||
|
PIOLEINPLACEFRAME m_pIOleInPlaceFrame;
|
||
|
CIOleItemContainer * m_pIOleItemContainer;
|
||
|
CAutomateContent * m_pIDispatch;
|
||
|
PIOLECONTROLSITE m_pIOleControlSite;
|
||
|
// CHtmlHelpCallback * m_pCallback;
|
||
|
IDocHostUIHandler* m_pCDocHostUIHandler;
|
||
|
IDocHostShowUI* m_pCDocHostShowUI;
|
||
|
IOleInPlaceActiveObject *m_pInPlaceActive;
|
||
|
DWORD m_dwEventCookie;
|
||
|
|
||
|
public:
|
||
|
CContainer();
|
||
|
~CContainer(void);
|
||
|
|
||
|
HRESULT ShutDown(void);
|
||
|
|
||
|
class IWebBrowserImpl* m_pWebBrowser;
|
||
|
class IWebBrowserAppImpl* m_pWebBrowserApp;
|
||
|
class DWebBrowserEventsImpl* m_pWebBrowserEvents;
|
||
|
LPOLECOMMANDTARGET m_pIE3CmdTarget;
|
||
|
void UIDeactivateIE();
|
||
|
HRESULT Create(HWND hWnd, LPRECT lpRect, BOOL bInstallEventSink = TRUE);
|
||
|
void SetFocus(BOOL bForceActivation = FALSE);
|
||
|
void SizeIt(int width, int height);
|
||
|
LRESULT ForwardMessage(UINT msg, WPARAM wParam, LPARAM lParam);
|
||
|
unsigned TranslateMessage(MSG * pMsg);
|
||
|
BOOL IsUIActive(void) { return m_pInPlaceActive != NULL; }
|
||
|
HWND m_hwndChild;
|
||
|
|
||
|
// IUnknown
|
||
|
//
|
||
|
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
|
||
|
STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
STDMETHODIMP_(ULONG) Release(void);
|
||
|
|
||
|
// IServiceProvider
|
||
|
|
||
|
STDMETHOD(QueryService)(REFGUID, REFIID, LPVOID *);
|
||
|
|
||
|
#ifdef _DEBUG
|
||
|
BOOL m_fDeleting;
|
||
|
#endif
|
||
|
};
|
||
|
|
||
|
|
||
|
typedef CContainer *PCONTAINER;
|
||
|
|
||
|
#if 0
|
||
|
|
||
|
class CIPropertyNotifySink : public IPropertyNotifySink
|
||
|
{
|
||
|
protected:
|
||
|
ULONG m_cRef;
|
||
|
class CContainer *m_pContainer;
|
||
|
LPUNKNOWN m_pUnkOuter;
|
||
|
|
||
|
public:
|
||
|
CIPropertyNotifySink(class CContainer *, LPUNKNOWN);
|
||
|
~CIPropertyNotifySink(void);
|
||
|
|
||
|
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
|
||
|
STDMETHODIMP_(ULONG) AddRef(void);
|
||
|
STDMETHODIMP_(ULONG) Release(void);
|
||
|
|
||
|
STDMETHODIMP OnChanged(DISPID);
|
||
|
STDMETHODIMP OnRequestEdit(DISPID);
|
||
|
};
|
||
|
|
||
|
#endif
|
||
|
|
||
|
#endif //_CONTAIN_H_
|