实现IDocHostShowUI接口
Zark 2006-03-10 03:55:21 在"定制webbroser控件"(不知翻译是否确切,英文customerized webbrowser control)时, 实现了如下的IDocHostUIHandler接口.
class DocHost : public CComObjectRootEx<CComSingleThreadModel>,
public IDispatchImpl<IDocHostUIHandlerDispatch,
&IID_IDocHostUIHandlerDispatch, &LIBID_ATLLib>
{
DrDebug* m_pLog;
Param* m_pParam;
MainFrame* m_pParent;
CComQIPtr<IDispatch> m_spExternal;
public:
//~ ****************************************************************************
//~ DocHost
//~
//~ Constructor of DocHost class
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
DocHost();
//~ ****************************************************************************
//~ ~DocHost
//~
//~ Destructor of DocHost class
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
virtual ~DocHost();
BEGIN_COM_MAP(DocHost)
COM_INTERFACE_ENTRY(IDocHostUIHandlerDispatch)
END_COM_MAP()
//~ ****************************************************************************
//~ SetExternal
//~
//~ Set pointer to external object
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
void SetExternal(IDispatch* pExt);
//~ ****************************************************************************
//~ SetParent
//~
//~ Set pointer to parent
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
BOOL SetParent(MainFrame* pParent);
//~ ****************************************************************************
//~ ShowContextMenu
//~
//~ IDocHostUIHandler Implementation
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
HRESULT STDMETHODCALLTYPE ShowContextMenu(DWORD dwID,DWORD x,DWORD y,
IUnknown *pcmdtReserved,IDispatch *pdispReserved,HRESULT *dwRetVal);
//~ ****************************************************************************
//~ GetHostInfo
//~
//~ IDocHostUIHandler Implementation
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
HRESULT STDMETHODCALLTYPE GetHostInfo(DWORD* pdwFlags,
DWORD* pdwDoubleClick);
//~ ****************************************************************************
//~ ShowUI
//~
//~ IDocHostUIHandler Implementation
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
HRESULT STDMETHODCALLTYPE ShowUI(DWORD dwID,IUnknown *pActiveObject,
IUnknown *pCommandTarget,IUnknown *pFrame,IUnknown *pDoc,
HRESULT *dwRetVal);
//~ ****************************************************************************
//~ HideUI
//~
//~ IDocHostUIHandler Implementation
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
HRESULT STDMETHODCALLTYPE HideUI();
//~ ****************************************************************************
//~ UpdateUI
//~
//~ IDocHostUIHandler Implementation
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
HRESULT STDMETHODCALLTYPE UpdateUI();
//~ ****************************************************************************
//~ EnableModeless
//~
//~ IDocHostUIHandler Implementation
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
HRESULT STDMETHODCALLTYPE EnableModeless(VARIANT_BOOL fEnable);
//~ ****************************************************************************
//~ OnDocWindowActivate
//~
//~ IDocHostUIHandler Implementation
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
HRESULT STDMETHODCALLTYPE OnDocWindowActivate(VARIANT_BOOL fActivate);
//~ ****************************************************************************
//~ OnFrameWindowActivate
//~
//~ IDocHostUIHandler Implementation
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
HRESULT STDMETHODCALLTYPE OnFrameWindowActivate(VARIANT_BOOL fActivate);
//~ ****************************************************************************
//~ ResizeBorder
//~
//~ IDocHostUIHandler Implementation
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
HRESULT STDMETHODCALLTYPE ResizeBorder(long left,long top,long right,
long bottom,IUnknown *pUIWindow,VARIANT_BOOL fFrameWindow);
//~ ****************************************************************************
//~ TranslateAccelerator
//~
//~ IDocHostUIHandler Implementation
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
HRESULT STDMETHODCALLTYPE TranslateAccelerator(DWORD_PTR hWnd,DWORD nMessage,
DWORD_PTR wParam,DWORD_PTR lParam,BSTR bstrGuidCmdGroup,DWORD nCmdID,
HRESULT *dwRetVal) ;
//~ ****************************************************************************
//~ GetOptionKeyPath
//~
//~ IDocHostUIHandler Implementation
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
HRESULT STDMETHODCALLTYPE GetOptionKeyPath(BSTR *pbstrKey,DWORD dw);
//~ ****************************************************************************
//~ GetDropTarget
//~
//~ IDocHostUIHandler Implementation
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
HRESULT STDMETHODCALLTYPE GetDropTarget(IUnknown *pDropTarget,
IUnknown **ppDropTarget);
//~ ****************************************************************************
//~ GetExternal
//~
//~ IDocHostUIHandler Implementation
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
HRESULT STDMETHODCALLTYPE GetExternal(IDispatch **ppDispatch);
//~ ****************************************************************************
//~ TranslateUrl
//~
//~ IDocHostUIHandler Implementation
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
HRESULT STDMETHODCALLTYPE TranslateUrl(DWORD dwTranslate,BSTR bstrURLIn,
BSTR *pbstrURLOut) ;
//~ ****************************************************************************
//~ FilterDataObject
//~
//~ IDocHostUIHandler Implementation
//~ Parameters:
//~
//~ Return:
//~ ****************************************************************************
HRESULT STDMETHODCALLTYPE FilterDataObject(IUnknown *pDO,IUnknown **ppDORet);
};
在主程序中使用
//- Create CDosHostUIHandelImpl instance
CComObject<DocHost>* pDocHost ;
hr=CComObject<DocHost>::CreateInstance(&pDocHost);
if(FAILED(hr))
{
m_pLog->FormatTrace(_T("Create DocHostUIHandleImpl Failed"));
LEAVE_FUNCTION(m_pLog);
return 0;
}
//- link up with host
CComQIPtr<IDocHostUIHandlerDispatch> pDocHostDisp;
pDocHostDisp=pDocHost;
pHost->SetExternalUIHandler(pDocHostDisp);
(其中pHost的类型是CComPtr<IAxWinHostWindow>)
使webbrowser与IDocHostUIHandler相连, 结果是令人满意的. 现在的问题是: 为了获得javascript中alert()函数事件,必须实现IDocHostShowUI, 请问应如何实现呢?