Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

345 lines
9.9 KiB

// 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_