Web browser extension

Source: Internet
Author: User

CComPtr<IUnknown> spUnk;HRESULT hr = CExternalUIHandler::_CreatorClass::CreateInstance(NULL, IID_IUnknown, (void**)&spUnk);ATLASSERT(SUCCEEDED(hr));CComQIPtr<IDocHostUIHandlerDispatch> spUI = spUnk;m_wtlBrowserView.SetExternalUIHandler(spUI);

#ifndef _EXTERNALUIHANDLER_H_#define _EXTERNALUIHANDLER_H_#pragma onceclass CExternalDisp:public CComObjectRoot,public IDispatch{public:CExternalDisp(void);~CExternalDisp(void);BEGIN_COM_MAP(CExternalDisp)COM_INTERFACE_ENTRY(IDispatch)END_COM_MAP()virtual HRESULT STDMETHODCALLTYPE GetTypeInfoCount( /* [out] */ UINT *pctinfo);virtual HRESULT STDMETHODCALLTYPE GetTypeInfo( /* [in] */ UINT iTInfo,/* [in] */ LCID lcid,/* [out] */ ITypeInfo **ppTInfo);virtual HRESULT STDMETHODCALLTYPE GetIDsOfNames( /* [in] */ REFIID riid,/* [size_is][in] */ LPOLESTR *rgszNames,/* [in] */ UINT cNames,/* [in] */ LCID lcid,/* [size_is][out] */ DISPID *rgDispId);virtual /* [local] */ HRESULT STDMETHODCALLTYPE Invoke( /* [in] */ DISPID dispIdMember,/* [in] */ REFIID riid,/* [in] */ LCID lcid,/* [in] */ WORD wFlags,/* [out][in] */ DISPPARAMS *pDispParams,/* [out] */ VARIANT *pVarResult,/* [out] */ EXCEPINFO *pExcepInfo,/* [out] */ UINT *puArgErr) ;};class ATL_NO_VTABLE CExternalUIHandler : public CComObjectRootEx<CComSingleThreadModel>,public CComCoClass<CExternalUIHandler>,public IDispatchImpl<IDocHostUIHandlerDispatch, &__uuidof(IDocHostUIHandlerDispatch)>{public:CComQIPtr<IDispatch> m_spExtDispatch;public:CExternalUIHandler();DECLARE_PROTECT_FINAL_CONSTRUCT()BEGIN_COM_MAP(CExternalUIHandler)COM_INTERFACE_ENTRY(IDocHostUIHandlerDispatch)COM_INTERFACE_ENTRY(IDispatch)END_COM_MAP()// IXmnWrapperUIHandlerpublic:// Do not show the context menuSTDMETHOD (ShowContextMenu) ( /* [in] */ DWORD dwID,/* [in] */ DWORD x,/* [in] */ DWORD y,/* [in] */ IUnknown  *pcmdtReserved,/* [in] */ IDispatch *pdispReserved,/* [retval][out] */ HRESULT  *dwRetVal);// Mark all the other methods as not implementedSTDMETHOD (GetHostInfo) ( /* [out][in] */ DWORD  *pdwFlags,/* [out][in] */ DWORD  *pdwDoubleClick);STDMETHOD (ShowUI) ( /* [in] */ DWORD dwID,/* [in] */ IUnknown  *pActiveObject,/* [in] */ IUnknown  *pCommandTarget,/* [in] */ IUnknown  *pFrame,/* [in] */ IUnknown  *pDoc,/* [retval][out] */ HRESULT  *dwRetVal);STDMETHOD (HideUI) (void);STDMETHOD (UpdateUI) (void);STDMETHOD (EnableModeless) ( /* [in] */ VARIANT_BOOL fEnable);STDMETHOD (OnDocWindowActivate) ( /* [in] */ VARIANT_BOOL fActivate);STDMETHOD (OnFrameWindowActivate) ( /* [in] */ VARIANT_BOOL fActivate);STDMETHOD (ResizeBorder) ( /* [in] */ long left,/* [in] */ long top,/* [in] */ long right,/* [in] */ long bottom,/* [in] */ IUnknown  *pUIWindow,/* [in] */ VARIANT_BOOL fFrameWindow);STDMETHOD (TranslateAccelerator) ( /* [in] */ DWORD hWnd,/* [in] */ DWORD nMessage,/* [in] */ DWORD wParam,/* [in] */ DWORD lParam,/* [in] */ BSTR bstrGuidCmdGroup,/* [in] */ DWORD nCmdID,/* [retval][out] */ HRESULT  *dwRetVal);STDMETHOD (GetOptionKeyPath) ( /* [out] */ BSTR  *pbstrKey,/* [in] */ DWORD dw);STDMETHOD (GetDropTarget) ( /* [in] */ IUnknown  *pDropTarget,/* [out] */ IUnknown  **ppDropTarget);STDMETHOD (GetExternal) ( /* [out] */ IDispatch  **ppDispatch);STDMETHOD (TranslateUrl) ( /* [in] */ DWORD dwTranslate,/* [in] */ BSTR bstrURLIn,/* [out] */ BSTR  *pbstrURLOut);STDMETHOD (FilterDataObject) ( /* [in] */ IUnknown  *pDO,/* [out] */ IUnknown  **ppDORet);};#endif //_EXTERNALUIHANDLER_H_

# Include "stdafx. H" # include "externaluihandler. H" # include "dbprivatehistory. H" cexternaldisp: cexternaldisp (void) {}; cexternaldisp ::~ Cexternaldisp (void) {}; hresult stdmethodcalltype cexternaldisp: gettypeinfocount (/* [out] */uint * pctinfo) {return e_notimpl;} hresult stdmethodcalltype cexternaldisp :: gettypeinfo (/* [in] */uint itinfo,/* [in] */lcid,/* [out] */itypeinfo ** pptinfo) {return e_notimpl ;} hresult stdmethodcalltype cexternaldisp: getidsofnames (/* [in] */refiid riid,/* [size_is] [in] */lpolestr * rgsznames ,/*[ In] */uint cnames,/* [in] */lcid,/* [size_is] [out] */dispid * rgdispid) {ccombstr bsname (* rgsznames ); if (bsname = olestr ("deleterowid") {* rgdispid = 2535; return s_ OK;} else if (bsname = olestr ("deletemsgid ")) {* rgdispid = 2537; return s_ OK;} return e_notimpl;} hresult stdmethodcalltype cexternaldisp: invoke (/* [in] */dispid dispidmember, /* [in] */refiid riid,/* [in] */lcid,/* [in] */ Word wflags,/* [out] [in] */dispparams * pdispparams,/* [out] */variant * pvarresult,/* [out] */parameter info * p1_info, /* [out] */uint * puargerr) {// The Order of parameters is from right to left if (dispidmember = 2535) {If (pdispparams-> cargs! = 1) return e_notimpl; If (pdispparams-> rgvarg [0]. VT! = Vt_i4) return e_notimpl; int nrowid = pdispparams-> rgvarg [0]. intval; return s_ OK;} else if (dispidmember = 2537) {If (pdispparams-> cargs! = 1) return e_notimpl; If (pdispparams-> rgvarg [0]. VT! = Vt_bstr) return e_notimpl; // pdispparams-> rgvarg [1]. bstrvalreturn s_ OK;} return e_notimpl ;} //////////////////////////////////////// //// // cexternaluihandler:: cexternaluihandler () {ccomobject <cexternaldisp> * OBJ; ccomobject <cexternaldisp>: createinstance (& OBJ); obj-> QueryInterface (iid_idispatch, (void **) & m_spextdispatch);} // do not show the context menuhresult stdmethodcalltype cexternaluihandler: showcontextmenu (/* [in] */DWORD dwid,/* [in] */dword x, /* [in] */DWORD y,/* [in] */iunknown * pcmdtreserved,/* [in] */idispatch * pdispreserved, /* [retval] [out] */hresult * dwretval) {* dwretval = s_ OK; return s_ OK;} hresult stdmethodcalltype cexternaluihandler :: gethostinfo (/* [out] [in] */DWORD * pdwflags,/* [out] [in] */DWORD * pdwdoubleclick) {return e_notimpl;} hresult stdmethodcalltype cexternaluihandler :: showui (/* [in] */DWORD dwid,/* [in] */iunknown * pactiveobject,/* [in] */iunknown * pcommandtarget, /* [in] */iunknown * pframe,/* [in] */iunknown * pdoc,/* [retval] [out] */hresult * dwretval) {return e_notimpl;} hresult implements cexternaluihandler: hideui (void) {return e_notimpl;} hresult completion failed: updateui (void) {return e_notimpl;} hresult implements cexternaluihandler :: enablemodeless (/* [in] */variant_bool fenable) {return e_notimpl;} hresult implements cexternaluihandler: ondocwindowactivate (/* [in] */variant_bool factivate) {return e_notimpl ;} hresult implements cexternaluihandler: onframewindowactivate (/* [in] */variant_bool factivate) {return e_notimpl;} hresult implements cexternaluihandler: resizeborder (/* [in] */long left, /* [in] */long top,/* [in] */long right,/* [in] */long bottom, /* [in] */iunknown * puiwindow,/* [in] */variant_bool fframewindow) {return e_notimpl;} hresult stdmethodcalltype cexternaluihandler :: translateaccelerator (/* [in] */DWORD hwnd,/* [in] */DWORD nmessage,/* [in] */DWORD wparam, /* [in] */DWORD lparam,/* [in] */BSTR bstrguid1_group,/* [in] */DWORD n1_id, /* [retval] [out] */hresult * dwretval) {return e_notimpl;} hresult stdmethodcalltype cexternaluihandler: getoptionkeypath (/* [out] */BSTR * pbstrkey, /* [in] */dword dw) {return e_notimpl;} hresult stdmethodcalltype cexternaluihandler: getdroptarget (/* [in] */iunknown * pdroptarget, /* [out] */iunknown ** ppdroptarget) {return e_notimpl;} hresult stdmethodcalltype cexternaluihandler: getexternal (/* [out] */idispatch ** ppdispatch) {return m_spextdispatch.copyto (ppdispatch);} hresult stdmethodcalltype cexternaluihandler: translateurl (/* [in] */DWORD dwtranslate,/* [in] */BSTR bstrurlin, /* [out] */BSTR * pbstrurlout) {return e_notimpl;} hresult stdmethodcalltype cexternaluihandler: filterdataobject (/* [in] */iunknown * PDO, /* [out] */iunknown ** ppdoret) {return e_notimpl ;}

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.