/**** * * * * DocHost2 - second attempt at the WAB Doc Host interface * * * Purpose: * basic implementation of a docobject host. Used by the body class to * host Trident and/or MSHTML - when we do LDAP searches, LDAP providers - are allowed to return URLs in the LDAPURI attribute. WAB then addds - a "general" property tab that hosts trident and shows the contents - of the URL within the WAB. This allows the providers to add ADs and - branding to their data to diffrentiate themselves from each other. - Oh, the things we do for business relationships ... * * History * August '96: brettm - created * Ported to WAB - vikramm 4/97 * * Copyright (C) Microsoft Corp. 1995, 1996, 1997. ****/ #ifndef _DOCHOST_H #define _DOCHOST_H #define RECYCLE_TRIDENT //#define ASYNC_LOADING // DocHost border sytles enum { dhbNone =0x0, // no border dhbHost =0x01, // dochost paints border dhbObject =0x02 // docobj paints border }; /* IWABDocHost Interface ---------------------------------------------------- */ struct _IWABDOCHOST; typedef struct _IWABDOCHOST *LPIWABDOCHOST; /* IWDH_OLEWINDOW ------------------------------------------------------ */ #define CBIWDH_OLEWINDOW sizeof(IWDH_OLEWINDOW) /* This contains these interfaces ... // *** IOleWindow methods *** virtual HRESULT STDMETHODCALLTYPE GetWindow(HWND *); virtual HRESULT STDMETHODCALLTYPE ContextSensitiveHelp(BOOL); */ #define IWDH_OLEWINDOW_METHODS(IPURE) \ MAPIMETHOD(GetWindow) \ (THIS_ HWND * phWnd) IPURE; \ MAPIMETHOD(ContextSensitiveHelp) \ (THIS_ BOOL fEnterMode) IPURE; \ #undef INTERFACE #define INTERFACE IWDH_OleWindow DECLARE_MAPI_INTERFACE_(IWDH_OleWindow, IUnknown) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(PURE) IWDH_OLEWINDOW_METHODS(PURE) }; #undef INTERFACE #define INTERFACE struct _IWDH_OLEWINDOW #undef METHOD_PREFIX #define METHOD_PREFIX IWDH_OLEWINDOW_ #undef LPVTBL_ELEM #define LPVTBL_ELEM lpvtbl #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, IWDH_OLEWINDOW_) MAPI_IUNKNOWN_METHODS(IMPL) IWDH_OLEWINDOW_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, IWDH_OLEWINDOW_) MAPI_IUNKNOWN_METHODS(IMPL) IWDH_OLEWINDOW_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) STDMETHOD_(type, method) DECLARE_MAPI_INTERFACE(IWDH_OLEWINDOW_) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(IMPL) IWDH_OLEWINDOW_METHODS(IMPL) }; typedef struct _IWDH_OLEWINDOW { MAPIX_BASE_MEMBERS(IWDH_OLEWINDOW) LPIWABDOCHOST lpIWDH; } IWABDOCHOST_OLEWINDOW, * LPIWABDOCHOST_OLEWINDOW; /* ----------------------------------------------------------------------------------------------*/ /* IWDH_OLEINPLACEFRAME ------------------------------------------------------ */ #define CBIWDH_OLEINPLACEFRAME sizeof(IWDH_OLEINPLACEFRAME) /* This contains these interfaces ... // *** IOleInPlaceUIWindow methods *** virtual HRESULT STDMETHODCALLTYPE GetBorder(LPRECT); virtual HRESULT STDMETHODCALLTYPE RequestBorderSpace(LPCBORDERWIDTHS); virtual HRESULT STDMETHODCALLTYPE SetBorderSpace(LPCBORDERWIDTHS); virtual HRESULT STDMETHODCALLTYPE SetActiveObject(IOleInPlaceActiveObject *, LPCOLESTR); // *** IOleInPlaceFrame methods *** virtual HRESULT STDMETHODCALLTYPE InsertMenus(HMENU, LPOLEMENUGROUPWIDTHS); virtual HRESULT STDMETHODCALLTYPE SetMenu(HMENU, HOLEMENU, HWND); virtual HRESULT STDMETHODCALLTYPE RemoveMenus(HMENU); virtual HRESULT STDMETHODCALLTYPE SetStatusText(LPCOLESTR); virtual HRESULT STDMETHODCALLTYPE EnableModeless(BOOL); virtual HRESULT STDMETHODCALLTYPE TranslateAccelerator(LPMSG, WORD); */ #undef TranslateAccelerator #define IWDH_OLEINPLACEFRAME_METHODS(IPURE) \ MAPIMETHOD(GetBorder) \ (THIS_ LPRECT lprc) IPURE; \ MAPIMETHOD(RequestBorderSpace) \ (THIS_ LPCBORDERWIDTHS pborderwidths) IPURE; \ MAPIMETHOD(SetBorderSpace) \ (THIS_ LPCBORDERWIDTHS pborderwidths) IPURE; \ MAPIMETHOD(SetActiveObject) \ (THIS_ IOleInPlaceActiveObject * pActiveObject, \ LPCOLESTR lpszObjName) IPURE; \ MAPIMETHOD(InsertMenus) \ (THIS_ HMENU hMenu, \ LPOLEMENUGROUPWIDTHS lpMenuWidths) IPURE; \ MAPIMETHOD(SetMenu) \ (THIS_ HMENU hMenu, \ HOLEMENU hOleMenu, \ HWND hWnd) IPURE; \ MAPIMETHOD(RemoveMenus) \ (THIS_ HMENU hMenu) IPURE; \ MAPIMETHOD(SetStatusText) \ (THIS_ LPCOLESTR pszStatusText) IPURE; \ MAPIMETHOD(EnableModeless) \ (THIS_ BOOL fEnable) IPURE; \ MAPIMETHOD(TranslateAccelerator) \ (THIS_ MSG * lpmsg, \ WORD wID) IPURE; \ #undef INTERFACE #define INTERFACE IWDH_OleInPlaceFrame DECLARE_MAPI_INTERFACE_(IWDH_OleInPlaceFrame, IUnknown) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(PURE) IWDH_OLEWINDOW_METHODS(PURE) IWDH_OLEINPLACEFRAME_METHODS(PURE) }; #undef INTERFACE #define INTERFACE struct _IWDH_OLEINPLACEFRAME #undef METHOD_PREFIX #define METHOD_PREFIX IWDH_OLEINPLACEFRAME_ #undef LPVTBL_ELEM #define LPVTBL_ELEM lpvtbl #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, IWDH_OLEINPLACEFRAME_) MAPI_IUNKNOWN_METHODS(IMPL) IWDH_OLEWINDOW_METHODS(IMPL) IWDH_OLEINPLACEFRAME_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, IWDH_OLEINPLACEFRAME_) MAPI_IUNKNOWN_METHODS(IMPL) IWDH_OLEWINDOW_METHODS(IMPL) IWDH_OLEINPLACEFRAME_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) STDMETHOD_(type, method) DECLARE_MAPI_INTERFACE(IWDH_OLEINPLACEFRAME_) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(IMPL) IWDH_OLEWINDOW_METHODS(IMPL) IWDH_OLEINPLACEFRAME_METHODS(IMPL) }; typedef struct _IWDH_OLEINPLACEFRAME { MAPIX_BASE_MEMBERS(IWDH_OLEINPLACEFRAME) LPIWABDOCHOST lpIWDH; } IWABDOCHOST_OLEINPLACEFRAME, * LPIWABDOCHOST_OLEINPLACEFRAME; /* ----------------------------------------------------------------------------------------------*/ /* IWDH_OLEINPLACESITE ------------------------------------------------------ */ #define CBIWDH_OLEINPLACESITE sizeof(IWDH_OLEINPLACESITE) /* This contains these interfaces ... // IOleInPlaceSite methods. virtual HRESULT STDMETHODCALLTYPE CanInPlaceActivate(); virtual HRESULT STDMETHODCALLTYPE OnInPlaceActivate(); virtual HRESULT STDMETHODCALLTYPE OnUIActivate(); virtual HRESULT STDMETHODCALLTYPE GetWindowContext(LPOLEINPLACEFRAME *, LPOLEINPLACEUIWINDOW *, LPRECT, LPRECT, LPOLEINPLACEFRAMEINFO); virtual HRESULT STDMETHODCALLTYPE Scroll(SIZE); virtual HRESULT STDMETHODCALLTYPE OnUIDeactivate(BOOL); virtual HRESULT STDMETHODCALLTYPE OnInPlaceDeactivate(); virtual HRESULT STDMETHODCALLTYPE DiscardUndoState(); virtual HRESULT STDMETHODCALLTYPE DeactivateAndUndo(); virtual HRESULT STDMETHODCALLTYPE OnPosRectChange(LPCRECT); */ #define IWDH_OLEINPLACESITE_METHODS(IPURE) \ MAPIMETHOD(CanInPlaceActivate) \ (THIS) IPURE; \ MAPIMETHOD(OnInPlaceActivate) \ (THIS) IPURE; \ MAPIMETHOD(OnUIActivate) \ (THIS) IPURE; \ MAPIMETHOD(GetWindowContext) \ (THIS_ LPOLEINPLACEFRAME * ppFrame, \ LPOLEINPLACEUIWINDOW * ppDoc, \ LPRECT lprcPosRect, \ LPRECT lprcClipRect, \ LPOLEINPLACEFRAMEINFO lpFrameInfo) IPURE; \ MAPIMETHOD(Scroll) \ (THIS_ SIZE scrollExtent) IPURE; \ MAPIMETHOD(OnUIDeactivate) \ (THIS_ BOOL fUndoable) IPURE; \ MAPIMETHOD(OnInPlaceDeactivate) \ (THIS) IPURE; \ MAPIMETHOD(DiscardUndoState) \ (THIS) IPURE; \ MAPIMETHOD(DeactivateAndUndo) \ (THIS) IPURE; \ MAPIMETHOD(OnPosRectChange) \ (THIS_ LPCRECT lprcPosRect) IPURE; \ #undef INTERFACE #define INTERFACE IWDH_OleInPlaceSite DECLARE_MAPI_INTERFACE_(IWDH_OleInPlaceSite, IUnknown) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(PURE) IWDH_OLEWINDOW_METHODS(PURE) IWDH_OLEINPLACESITE_METHODS(PURE) }; #undef INTERFACE #define INTERFACE struct _IWDH_OLEINPLACESITE #undef METHOD_PREFIX #define METHOD_PREFIX IWDH_OLEINPLACESITE_ #undef LPVTBL_ELEM #define LPVTBL_ELEM lpvtbl #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, IWDH_OLEINPLACESITE_) MAPI_IUNKNOWN_METHODS(IMPL) IWDH_OLEWINDOW_METHODS(IMPL) IWDH_OLEINPLACESITE_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, IWDH_OLEINPLACESITE_) MAPI_IUNKNOWN_METHODS(IMPL) IWDH_OLEWINDOW_METHODS(IMPL) IWDH_OLEINPLACESITE_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) STDMETHOD_(type, method) DECLARE_MAPI_INTERFACE(IWDH_OLEINPLACESITE_) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(IMPL) IWDH_OLEWINDOW_METHODS(IMPL) IWDH_OLEINPLACESITE_METHODS(IMPL) }; typedef struct _IWDH_OLEINPLACESITE { MAPIX_BASE_MEMBERS(IWDH_OLEINPLACESITE) LPIWABDOCHOST lpIWDH; } IWABDOCHOST_OLEINPLACESITE, * LPIWABDOCHOST_OLEINPLACESITE; /* ----------------------------------------------------------------------------------------------*/ /* IWDH_OLECLIENTSITE ------------------------------------------------------ */ #define CBIWDH_OLECLIENTSITE sizeof(IWDH_OLECLIENTSITE) /* This contains these interfaces ... // IOleClientSite methods. virtual HRESULT STDMETHODCALLTYPE SaveObject(); virtual HRESULT STDMETHODCALLTYPE GetMoniker(DWORD, DWORD, LPMONIKER *); virtual HRESULT STDMETHODCALLTYPE GetContainer(LPOLECONTAINER *); virtual HRESULT STDMETHODCALLTYPE ShowObject(); virtual HRESULT STDMETHODCALLTYPE OnShowWindow(BOOL); virtual HRESULT STDMETHODCALLTYPE RequestNewObjectLayout(); */ #define IWDH_OLECLIENTSITE_METHODS(IPURE) \ MAPIMETHOD(SaveObject) \ (THIS) IPURE; \ MAPIMETHOD(GetMoniker) \ (THIS_ DWORD dwAssign, \ DWORD dwWhichMoniker, \ LPMONIKER * ppmnk) IPURE; \ MAPIMETHOD(GetContainer) \ (THIS_ LPOLECONTAINER * ppCont) IPURE; \ MAPIMETHOD(ShowObject) \ (THIS) IPURE; \ MAPIMETHOD(OnShowWindow) \ (THIS_ BOOL fShow) IPURE; \ MAPIMETHOD(RequestNewObjectLayout) \ (THIS) IPURE; \ #undef INTERFACE #define INTERFACE IWDH_OleClientSite DECLARE_MAPI_INTERFACE_(IWDH_OleClientSite, IUnknown) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(PURE) IWDH_OLECLIENTSITE_METHODS(PURE) }; #undef INTERFACE #define INTERFACE struct _IWDH_OLECLIENTSITE #undef METHOD_PREFIX #define METHOD_PREFIX IWDH_OLECLIENTSITE_ #undef LPVTBL_ELEM #define LPVTBL_ELEM lpvtbl #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, IWDH_OLECLIENTSITE_) MAPI_IUNKNOWN_METHODS(IMPL) IWDH_OLECLIENTSITE_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, IWDH_OLECLIENTSITE_) MAPI_IUNKNOWN_METHODS(IMPL) IWDH_OLECLIENTSITE_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) STDMETHOD_(type, method) DECLARE_MAPI_INTERFACE(IWDH_OLECLIENTSITE_) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(IMPL) IWDH_OLECLIENTSITE_METHODS(IMPL) }; typedef struct _IWDH_OLECLIENTSITE { MAPIX_BASE_MEMBERS(IWDH_OLECLIENTSITE) LPIWABDOCHOST lpIWDH; } IWABDOCHOST_OLECLIENTSITE, * LPIWABDOCHOST_OLECLIENTSITE; /* ----------------------------------------------------------------------------------------------*/ /* IWDH_OLEDOCUMENTSITE ------------------------------------------------------ */ #define CBIWDH_OLEDOCUMENTSITE sizeof(IWDH_OLEDOCUMENTSITE) /* This contains these interfaces ... // IOleDocumentSite virtual HRESULT STDMETHODCALLTYPE ActivateMe(LPOLEDOCUMENTVIEW); */ #define IWDH_OLEDOCUMENTSITE_METHODS(IPURE) \ MAPIMETHOD(ActivateMe) \ (THIS_ LPOLEDOCUMENTVIEW pViewToActivate)IPURE; \ #undef INTERFACE #define INTERFACE IWDH_OleDocumentSite DECLARE_MAPI_INTERFACE_(IWDH_OleDocumentSite, IUnknown) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(PURE) IWDH_OLEDOCUMENTSITE_METHODS(PURE) }; #undef INTERFACE #define INTERFACE struct _IWDH_OLEDOCUMENTSITE #undef METHOD_PREFIX #define METHOD_PREFIX IWDH_OLEDOCUMENTSITE_ #undef LPVTBL_ELEM #define LPVTBL_ELEM lpvtbl #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, IWDH_OLEDOCUMENTSITE_) MAPI_IUNKNOWN_METHODS(IMPL) IWDH_OLEDOCUMENTSITE_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, IWDH_OLEDOCUMENTSITE_) MAPI_IUNKNOWN_METHODS(IMPL) IWDH_OLEDOCUMENTSITE_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) STDMETHOD_(type, method) DECLARE_MAPI_INTERFACE(IWDH_OLEDOCUMENTSITE_) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(IMPL) IWDH_OLEDOCUMENTSITE_METHODS(IMPL) }; typedef struct _IWDH_OLEDOCUMENTSITE { MAPIX_BASE_MEMBERS(IWDH_OLEDOCUMENTSITE) LPIWABDOCHOST lpIWDH; } IWABDOCHOST_OLEDOCUMENTSITE, * LPIWABDOCHOST_OLEDOCUMENTSITE; /* ----------------------------------------------------------------------------------------------*/ /*********************************************/ #undef INTERFACE #define INTERFACE IWABDocHost DECLARE_MAPI_INTERFACE_(IWABDocHost, IUnknown) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(PURE) }; #undef INTERFACE #define INTERFACE struct _IWABDOCHOST #undef METHOD_PREFIX #define METHOD_PREFIX IWABDOCHOST_ #undef LPVTBL_ELEM #define LPVTBL_ELEM lpvtbl #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_DECLARE(type, method, IWABDOCHOST_) MAPI_IUNKNOWN_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) MAPIMETHOD_TYPEDEF(type, method, IWABDOCHOST_) MAPI_IUNKNOWN_METHODS(IMPL) #undef MAPIMETHOD_ #define MAPIMETHOD_(type, method) STDMETHOD_(type, method) DECLARE_MAPI_INTERFACE(IWABDOCHOST_) { BEGIN_INTERFACE MAPI_IUNKNOWN_METHODS(IMPL) }; typedef struct _IWABDOCHOST { MAPIX_BASE_MEMBERS(IWABDOCHOST) // Pointer to self ... LPIWABDOCHOST lpIWDH; LPIWABDOCHOST_OLEWINDOW lpIWDH_OleWindow; LPIWABDOCHOST_OLEINPLACEFRAME lpIWDH_OleInPlaceFrame; LPIWABDOCHOST_OLEINPLACESITE lpIWDH_OleInPlaceSite; LPIWABDOCHOST_OLECLIENTSITE lpIWDH_OleClientSite; LPIWABDOCHOST_OLEDOCUMENTSITE lpIWDH_OleDocumentSite; //protected HWND m_hwnd; HWND m_hwndDocObj; LPOLEOBJECT m_lpOleObj; LPOLEDOCUMENTVIEW m_pDocView; BOOL m_fInPlaceActive; BOOL m_fUIActive; LPOLEINPLACEACTIVEOBJECT m_pInPlaceActiveObj; //LPOLEINPLACEACTIVEOBJECT m_pIPObj; LPOLEINPLACEOBJECT m_pIPObj; } IWABDOCHOST, * LPIWABDOCHOST; // Exposed functions // Create a new WAB DocHost object HRESULT HrNewWABDocHostObject(LPVOID * lppIWABDOCHOST); void ReleaseDocHostObject(LPIWABDOCHOST lpIWABDocHost); void UninitTrident(); // Loads the URL from the URL string HRESULT HrLoadURL(LPIWABDOCHOST lpIWABDocHost, LPTSTR lpszURL); // Initialization HRESULT HrInit(LPIWABDOCHOST lpIWABDocHost, HWND hwndParent, int idDlgItem, DWORD dhbBorder); ///////////////// typedef HRESULT (STDMETHODCALLTYPE CREATEURLMONIKER) ( LPMONIKER pMkCtx, LPCWSTR szURL, LPMONIKER FAR * ppmk ); typedef CREATEURLMONIKER FAR * LPCREATEURLMONIKER; // statics //static LRESULT CALLBACK ExtWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); // Not ported over ... // // BOOL WMNotify(int idFrom, NMHDR *pnmh) PURE; // BOOL WMCommand(HWND, int, WORD) PURE; // void OnDownloadComplete(); // HWND Hwnd(); // // The caller should always GetProcAddress("DllGetVersion"), not // implicitly link to it. // typedef HRESULT (STDMETHODCALLTYPE DLLGETVERSIONPROCOE)(DLLVERSIONINFO *); typedef DLLGETVERSIONPROCOE FAR * LPDLLGETVERSIONPROCOE; #endif //_DOCHOST_H