|
|
#include "priv.h"
#include "dhuihand.h"
#define DM_DOCHOSTUIHANDLER 0
//==========================================================================
// IDocHostUIHandler implementation
//==========================================================================
HRESULT CDocHostUIHandler::ShowContextMenu(DWORD dwID, POINT *ppt, IUnknown *pcmdtReserved, IDispatch *pdispReserved) { TraceMsg(DM_DOCHOSTUIHANDLER, "CDOH::ShowContextMenu called");
//
// LATER: WebBand in a DesktBar/BrowserBar needs to hook this event
// to popup a customized context menu.
//
return S_FALSE; // Host did not display any UI.
}
HRESULT CDocHostUIHandler::GetHostInfo(DOCHOSTUIINFO *pInfo) { TraceMsg(DM_DOCHOSTUIHANDLER, "CDOH::GetHostInfo called");
// Trident does not initialize it. It's defined as [in] parameter.
#if 0
if (pInfo->cbSize < SIZEOF(DOCHOSTUIINFO)) { return E_INVALIDARG; } #endif
pInfo->cbSize = SIZEOF(DOCHOSTUIINFO); pInfo->dwFlags = DOCHOSTUIFLAG_BROWSER; // Disable double buffering if low memory machine.
// if (SHIsLowMemoryMachine(ILMM_IE4))
// pInfo->dwFlags = pInfo->dwFlags | DOCHOSTUIFLAG_DISABLE_OFFSCREEN;
pInfo->dwDoubleClick = DOCHOSTUIDBLCLK_DEFAULT; // default
return S_OK; }
HRESULT CDocHostUIHandler::ShowUI( DWORD dwID, IOleInPlaceActiveObject *pActiveObject, IOleCommandTarget *pCommandTarget, IOleInPlaceFrame *pFrame, IOleInPlaceUIWindow *pDoc) { TraceMsg(DM_DOCHOSTUIHANDLER, "CDOH::ShowUI called");
// Host did not display its own UI. Trident will proceed to display its own.
return S_FALSE; }
HRESULT CDocHostUIHandler::HideUI(void) { TraceMsg(DM_DOCHOSTUIHANDLER, "CDOH::HideUI called"); // This one is paired with ShowUI
return S_FALSE; }
HRESULT CDocHostUIHandler::UpdateUI(void) { TraceMsg(DM_DOCHOSTUIHANDLER, "CDOH::UpdateUI called"); // LATER: Isn't this equivalent to OLECMDID_UPDATECOMMANDS?
return S_FALSE; }
HRESULT CDocHostUIHandler::EnableModeless(BOOL fEnable) { TraceMsg(DM_DOCHOSTUIHANDLER, "CDOH::EnableModeless called"); // Called from the Trident when the equivalent member of its
// IOleInPlaceActiveObject is called by the frame. We don't care
// those cases.
return S_OK; }
HRESULT CDocHostUIHandler::OnDocWindowActivate(BOOL fActivate) { // Called from the Trident when the equivalent member of its
// IOleInPlaceActiveObject is called by the frame. We don't care
// those cases.
return S_OK; }
HRESULT CDocHostUIHandler::OnFrameWindowActivate(BOOL fActivate) { // Called from the Trident when the equivalent member of its
// IOleInPlaceActiveObject is called by the frame. We don't care
// those cases.
return S_OK; }
HRESULT CDocHostUIHandler::ResizeBorder( LPCRECT prcBorder, IOleInPlaceUIWindow *pUIWindow, BOOL fRameWindow) { // Called from the Trident when the equivalent member of its
// IOleInPlaceActiveObject is called by the frame. We don't care
// those cases.
return S_OK; }
HRESULT CDocHostUIHandler::TranslateAccelerator( LPMSG lpMsg, const GUID *pguidCmdGroup, DWORD nCmdID) { // Called from the Trident when the equivalent member of its
// IOleInPlaceActiveObject is called by the frame. We don't care
// those cases.
return S_FALSE; // The message was not translated
}
HRESULT CDocHostUIHandler::GetOptionKeyPath(BSTR *pbstrKey, DWORD dw) { // Trident will default to its own user options.
*pbstrKey = NULL; return S_FALSE; }
HRESULT CDocHostUIHandler::GetDropTarget(IDropTarget *pDropTarget, IDropTarget **ppDropTarget) { TraceMsg(DM_DOCHOSTUIHANDLER, "CDOH::GetDropTarget called");
return E_NOTIMPL; }
HRESULT CDocHostUIHandler::GetAltExternal(IDispatch **ppDisp) { HRESULT hr = E_FAIL; IDocHostUIHandler *pDocHostUIHandler; IOleObject *pOleObject; IOleClientSite *pOleClientSite;
*ppDisp = NULL;
// * QI ourselves for a service provider
// * QS for the top level browser's service provider
// * Ask for an IOleObject
// * Ask the IOleObject for an IOleClientSite
// * QI the IOleClientSite for an IDocHostUIHandler
// * Call GetExternal on the IDocHostUIHandler to get the IDispatch
if (SUCCEEDED(IUnknown_QueryServiceForWebBrowserApp(this, IID_PPV_ARG(IOleObject, &pOleObject)))) { if (SUCCEEDED(pOleObject->GetClientSite(&pOleClientSite))) { if (SUCCEEDED(pOleClientSite->QueryInterface(IID_IDocHostUIHandler, (void **)&pDocHostUIHandler))) { hr = pDocHostUIHandler->GetExternal(ppDisp); pDocHostUIHandler->Release(); } pOleClientSite->Release(); } pOleObject->Release(); }
return hr; }
HRESULT CDocHostUIHandler::GetExternal(IDispatch **ppDisp) { TraceMsg(DM_DOCHOSTUIHANDLER, "CDOH::GetExternal called");
HRESULT hr;
if (ppDisp) { IDispatch *psuihDisp; IDispatch *pAltExternalDisp;
*ppDisp = NULL;
GetAltExternal(&pAltExternalDisp);
hr = CShellUIHelper_CreateInstance2((IUnknown **)&psuihDisp, IID_IDispatch, (IUnknown *)this, pAltExternalDisp); if (SUCCEEDED(hr)) { *ppDisp = psuihDisp;
if (pAltExternalDisp) { // Don't hold a ref - the ShellUIHelper will do it
pAltExternalDisp->Release(); } } else if (pAltExternalDisp) { // Couldn't create a ShellUIHelper but we got our host's
// external.
*ppDisp = pAltExternalDisp; hr = S_OK; } } else { hr = E_INVALIDARG; }
ASSERT((SUCCEEDED(hr) && (*ppDisp)) || (FAILED(hr))); return hr; }
HRESULT CDocHostUIHandler::TranslateUrl(DWORD dwTranslate, OLECHAR *pchURLIn, OLECHAR **ppchURLOut) { TraceMsg(DM_DOCHOSTUIHANDLER, "CDOH::TranslateUrl called");
return S_FALSE; }
HRESULT CDocHostUIHandler::FilterDataObject(IDataObject *pDO, IDataObject **ppDORet) { TraceMsg(DM_DOCHOSTUIHANDLER, "CDOH::FilterDataObject called");
return S_FALSE; }
|