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.
 
 
 
 
 
 

492 lines
14 KiB

/*
* SITE.H
* View Site for Document Objects.
*
* Copyright (c)1995-1999 Microsoft Corporation, All Rights Reserved
*/
#ifndef _SITE_H_
#define _SITE_H_
#include "stdafx.h"
#include "mlang.h"
class CProxyFrame;
class CTriEditEventSink;
class CImpIOleClientSite : public IOleClientSite
{
protected:
ULONG m_cRef;
class CSite *m_pSite;
LPUNKNOWN m_pUnkOuter;
public:
CImpIOleClientSite(class CSite *, IUnknown *);
~CImpIOleClientSite(void);
STDMETHODIMP QueryInterface(REFIID, void **);
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 CImpIOleClientSite *PCImpIOleClientSite;
class CImpIAdviseSink : public IAdviseSink
{
protected:
ULONG m_cRef;
class CSite *m_pSite;
LPUNKNOWN m_pUnkOuter;
public:
CImpIAdviseSink(class CSite *, IUnknown *);
~CImpIAdviseSink(void);
STDMETHODIMP QueryInterface(REFIID, void **);
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);
};
typedef CImpIAdviseSink *PCImpIAdviseSink;
class CImplPropertyNotifySink : public IPropertyNotifySink
{
protected:
ULONG m_cRef;
class CSite *m_pSite;
LPUNKNOWN m_pUnkOuter;
public:
CImplPropertyNotifySink(class CSite *, IUnknown *);
~CImplPropertyNotifySink(void);
STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
STDMETHODIMP OnChanged(DISPID dispid);
STDMETHODIMP OnRequestEdit (DISPID dispid);
};
typedef CImplPropertyNotifySink *PCImplPropertyNotifySink;
class CImpIOleInPlaceSite : public IOleInPlaceSite
{
protected:
ULONG m_cRef;
class CSite *m_pSite;
LPUNKNOWN m_pUnkOuter;
public:
CImpIOleInPlaceSite(class CSite *, IUnknown *);
~CImpIOleInPlaceSite(void);
STDMETHODIMP QueryInterface(REFIID, void **);
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 CImpIOleInPlaceSite *PCImpIOleInPlaceSite;
class CImpIOleDocumentSite : public IOleDocumentSite
{
protected:
ULONG m_cRef;
class CSite *m_pSite;
LPUNKNOWN m_pUnkOuter;
public:
CImpIOleDocumentSite(class CSite *, IUnknown *);
~CImpIOleDocumentSite(void);
STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
STDMETHODIMP ActivateMe(IOleDocumentView *);
};
typedef CImpIOleDocumentSite *PCImpIOleDocumentSite;
///////////////////////////////////////////////////
// MSHTML.DLL host integration interfaces
///////////////////////////////////////////////////
class CImpIDocHostUIHandler : public IDocHostUIHandler
{
protected:
ULONG m_cRef;
class CSite *m_pSite;
LPUNKNOWN m_pUnkOuter;
public:
CImpIDocHostUIHandler(class CSite *, IUnknown *);
~CImpIDocHostUIHandler(void);
STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
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 ShowContextMenu(
DWORD dwID,
POINT * pptPosition,
IUnknown* pCommandTarget,
IDispatch * pDispatchObjectHit);
STDMETHODIMP TranslateAccelerator(
/* [in] */ LPMSG lpMsg,
/* [in] */ const GUID __RPC_FAR *pguidCmdGroup,
/* [in] */ DWORD nCmdID);
STDMETHODIMP GetOptionKeyPath(BSTR* pbstrKey, DWORD dw);
STDMETHODIMP GetDropTarget(
/* [in] */ IDropTarget __RPC_FAR *pDropTarget,
/* [out] */ IDropTarget __RPC_FAR *__RPC_FAR *ppDropTarget);
STDMETHODIMP GetExternal(
/* [out] */ IDispatch __RPC_FAR *__RPC_FAR *ppDispatch);
STDMETHODIMP TranslateUrl(
/* [in] */ DWORD dwTranslate,
/* [in] */ OLECHAR __RPC_FAR *pchURLIn,
/* [out] */ OLECHAR __RPC_FAR *__RPC_FAR *ppchURLOut);
STDMETHODIMP FilterDataObject(
/* [in] */ IDataObject __RPC_FAR *pDO,
/* [out] */ IDataObject __RPC_FAR *__RPC_FAR *ppDORet);
};
typedef CImpIDocHostUIHandler* PCImpIDocHostUIHandler;
class CImpIDocHostShowUI : public IDocHostShowUI
{
protected:
ULONG m_cRef;
class CSite *m_pSite;
LPUNKNOWN m_pUnkOuter;
public:
CImpIDocHostShowUI(class CSite *, IUnknown *);
~CImpIDocHostShowUI(void);
STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
STDMETHODIMP ShowMessage(
HWND hwnd,
LPOLESTR lpstrText,
LPOLESTR lpstrCaption,
DWORD dwType,
LPOLESTR lpstrHelpFile,
DWORD dwHelpContext,
LRESULT * plResult);
STDMETHODIMP ShowHelp(
HWND hwnd,
LPOLESTR pszHelpFile,
UINT uCommand,
DWORD dwData,
POINT ptMouse,
IDispatch * pDispatchObjectHit);
};
typedef CImpIDocHostShowUI* PCImpIDocHostShowUI;
/*
* IDispatch - implements Ambient properties
*/
class CImpAmbientIDispatch : public IDispatch
{
protected:
ULONG m_cRef;
class CSite *m_pSite;
LPUNKNOWN m_pUnkOuter;
public:
CImpAmbientIDispatch(class CSite *, IUnknown *);
~CImpAmbientIDispatch(void);
STDMETHODIMP QueryInterface(REFIID, LPVOID *);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
STDMETHODIMP GetTypeInfoCount(UINT *);
STDMETHODIMP GetTypeInfo(UINT, LCID, ITypeInfo **);
STDMETHODIMP GetIDsOfNames(REFIID, OLECHAR **, UINT
, LCID, DISPID *);
STDMETHODIMP Invoke(DISPID, REFIID, LCID, USHORT
, DISPPARAMS *, VARIANT *, EXCEPINFO *, UINT *);
};
typedef class CImpAmbientIDispatch *PCImpAmbientIDispatch;
class CImpIOleControlSite : public IOleControlSite
{
protected:
ULONG m_cRef;
class CSite *m_pSite;
LPUNKNOWN m_pUnkOuter;
public:
CImpIOleControlSite(class CSite *, IUnknown *);
~CImpIOleControlSite(void);
STDMETHODIMP QueryInterface(REFIID, void **);
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
STDMETHODIMP OnControlInfoChanged(void) { return S_OK;}
STDMETHODIMP LockInPlaceActive(BOOL) {return E_NOTIMPL;}
STDMETHODIMP GetExtendedControl(IDispatch**) {return E_NOTIMPL;}
STDMETHODIMP TransformCoords(POINTL*, POINTF*, DWORD) {return E_NOTIMPL;}
STDMETHODIMP TranslateAccelerator(LPMSG, DWORD) {return E_NOTIMPL;}
STDMETHODIMP OnFocus(BOOL) { return S_OK;}
STDMETHODIMP ShowPropertyFrame(void) { return E_NOTIMPL; }
};
typedef class CImpIOleControlSite *PCImpIOleControlSite;
/*
* The CSite class, a COM object with the interfaces IOleClientSite,
* IAdviseSink, IOleInPlaceSite, and IOleDocumentSite.
*/
class CSite : public IUnknown
{
private:
ULONG m_cRef;
HWND m_hWnd; //Client area window of parent
DWORD m_dwPropNotifyCookie;
DWORD m_dwOleObjectCookie;
class CProxyFrame* m_pFR;
BOOL m_bFiltered;
//Object interfaces
LPUNKNOWN m_pObj;
LPOLEOBJECT m_pIOleObject;
LPOLEINPLACEOBJECT m_pIOleIPObject;
LPOLEDOCUMENTVIEW m_pIOleDocView;
LPOLECOMMANDTARGET m_pIOleCommandTarget;
//Our interfaces
PCImpIOleClientSite m_pImpIOleClientSite;
PCImpIAdviseSink m_pImpIAdviseSink;
PCImpIOleInPlaceSite m_pImpIOleIPSite;
PCImpIOleDocumentSite m_pImpIOleDocumentSite;
PCImpIDocHostUIHandler m_pImpIDocHostUIHandler;
PCImpIDocHostShowUI m_pImpIDocHostShowUI;
PCImpAmbientIDispatch m_pImpAmbientIDispatch;
PCImplPropertyNotifySink m_pImpIPropertyNotifySink;
PCImpIOleControlSite m_pImpIOleControlSite;
CTriEditEventSink* m_pTriEdDocEvtSink;
CTriEditEventSink* m_pTriEdWndEvtSink;
BOOL m_bfSaveAsUnicode;
UINT m_cpCodePage;
IMultiLanguage2* m_piMLang;
protected:
public:
CSite(CProxyFrame*);
~CSite(void);
//BOOL ObjectInitialize( TCHAR* pchPath );
//Gotta have an IUnknown for delegation
STDMETHODIMP QueryInterface(REFIID, void** );
STDMETHODIMP_(ULONG) AddRef(void);
STDMETHODIMP_(ULONG) Release(void);
// Other functions
HRESULT HrCreate(IUnknown* pUnk, IUnknown** ppUnkTriEdit);
HRESULT HrObjectInitialize();
HRESULT HrRegisterPropNotifySink(BOOL fRegister);
void Close(BOOL);
void InitialActivate(LONG, HWND hWnd);
void Activate(LONG);
void UpdateObjectRects(void);
HRESULT HrIsDirtyIPersistStreamInit(BOOL& bVal);
HRESULT HrSaveToFile(BSTR bstrPath, DWORD dwFilterFlags);
HRESULT HrSaveToBstr(BSTR* bstr, DWORD dwFilterFlags);
HRESULT HrSaveToStream(LPSTREAM pStream);
HRESULT HrSaveToStreamAndFilter(LPSTREAM* ppStream, DWORD dwFilterFlags);
HRESULT HrTestFileOpen(BSTR path);
// Filtering methods
HRESULT HrFileToStream(LPCTSTR fileName, LPSTREAM* ppiStream);
HRESULT HrURLToStream(LPCTSTR szURL, LPSTREAM* ppiStream);
HRESULT HrSecureURLToStream(LPCTSTR szURL, LPSTREAM* ppiStream);
HRESULT HrNonSecureURLToStream(LPCTSTR szURL, LPSTREAM* ppiStream);
HRESULT HrStreamToFile(LPSTREAM pStream, LPCTSTR fileName);
HRESULT HrBstrToStream(BSTR bstrSrc, LPSTREAM* ppStream);
HRESULT HrStreamToBstr(LPSTREAM pStream, BSTR* pBstr, BOOL bfRetainByteOrderMark = FALSE);
HRESULT HrFilter(BOOL bDirection, LPSTREAM pSrcStream, LPSTREAM* ppFilteredStream, DWORD dwFilterFlags);
HRESULT HrConvertStreamToUnicode ( IStream* piStream );
BOOL BfFlipBytesIfBigEndianUnicode ( CHAR* pchData, int cbSize );
BOOL IsUnicode ( void* pData, int cbSize );
// ReadyState property methods
void OnReadyStateChanged();
// helper functions
HRESULT GetContainer ( LPOLECONTAINER* ppContainer );
inline CProxyFrame* GetFrame(void) {
return m_pFR;
}
inline LPUNKNOWN GetObjectUnknown(void ) {
return m_pObj;
}
inline PCImpIOleInPlaceSite GetIPSite(void) {
return m_pImpIOleIPSite;
}
inline HWND GetWindow(void) {
return m_hWnd;
}
inline void SetWindow(HWND hwnd) {
m_hWnd = hwnd;
}
inline LPOLECOMMANDTARGET GetCommandTarget(void) {
return m_pIOleCommandTarget;
}
inline void SetCommandTarget(LPOLECOMMANDTARGET pTarget) {
m_pIOleCommandTarget = pTarget;
}
inline void SetDocView(LPOLEDOCUMENTVIEW pDocView) {
// VSQFE:406/WinSERAID:23872, hongyuwu, 4/18/2002
// need to release the old pointer first
// (AddRef'ed in CImpIOleDocumentSite::ActivateMe)
if(m_pIOleDocView) m_pIOleDocView->Release();
m_pIOleDocView = pDocView;
}
inline void SetIPObject(LPOLEINPLACEOBJECT pIPObject) {
m_pIOleIPObject = pIPObject;
}
inline LPOLEINPLACEOBJECT GetIPObject(void) {
return m_pIOleIPObject;
}
inline BOOL GetSaveAsUnicode ( void ) {
return m_bfSaveAsUnicode;
}
inline BOOL SetSaveAsUnicode ( BOOL bfUnicode ) {
BOOL bf = m_bfSaveAsUnicode;
m_bfSaveAsUnicode = bfUnicode;
return bf;
}
inline UINT GetCurrentCodePage ( void ) {
return m_cpCodePage;
}
};
typedef CSite* PCSite;
//DeleteInterfaceImp calls 'delete' and NULLs the pointer
#define DeleteInterfaceImp(p)\
{\
if (NULL!=p)\
{\
delete p;\
p=NULL;\
}\
}
//ReleaseInterface calls 'Release' and NULLs the pointer
#define ReleaseInterface(p)\
{\
IUnknown *pt=(IUnknown *)p;\
p=NULL;\
if (NULL!=pt)\
pt->Release();\
}
#endif //_SITE_H_