zoukankan      html  css  js  c++  java
  • Web Browser 的扩展



    	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 once
    class 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()
    
    	// IXmnWrapperUIHandler
    public:
    	// Do not show the context menu
    	STDMETHOD (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 implemented
    
    	STDMETHOD (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 lcid,
    									  /* [out] */ ITypeInfo **ppTInfo)
    {
    	return E_NOTIMPL;
    }
    
    HRESULT STDMETHODCALLTYPE CExternalDisp::GetIDsOfNames( 
    	/* [in] */ REFIID riid,
    	/* [size_is][in] */ LPOLESTR *rgszNames,
    	/* [in] */ UINT cNames,
    	/* [in] */ LCID 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 lcid,
    	/* [in] */ WORD wFlags,
    	/* [out][in] */ DISPPARAMS *pDispParams,
    	/* [out] */ VARIANT *pVarResult,
    	/* [out] */ EXCEPINFO *pExcepInfo,
    	/* [out] */ UINT *puArgErr) 
    {
    	//参数顺序为从右向左
    	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].bstrVal
    
    		return 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 menu
    HRESULT 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 STDMETHODCALLTYPE CExternalUIHandler::HideUI(void)
    {
    	return E_NOTIMPL;
    }
    
    
    HRESULT STDMETHODCALLTYPE CExternalUIHandler::UpdateUI(void)
    {
    	return E_NOTIMPL;
    }
    
    HRESULT STDMETHODCALLTYPE CExternalUIHandler::EnableModeless( 
    							/* [in] */ VARIANT_BOOL fEnable)
    {
    	return E_NOTIMPL;
    }
    
    
    HRESULT STDMETHODCALLTYPE CExternalUIHandler::OnDocWindowActivate( 
    								 /* [in] */ VARIANT_BOOL fActivate)
    {
    	return E_NOTIMPL;
    }
    
    
    HRESULT STDMETHODCALLTYPE CExternalUIHandler::OnFrameWindowActivate( 
    								   /* [in] */ VARIANT_BOOL fActivate)
    {
    	return E_NOTIMPL;
    }
    
    
    HRESULT STDMETHODCALLTYPE 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 bstrGuidCmdGroup,
    								  /* [in] */ DWORD nCmdID,
    								  /* [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;
    }
    


  • 相关阅读:
    《父亲写的散文诗》--许飞
    python 解数独
    github key already in use
    openwrt ddns绑定域名
    hexo 长期后台运行
    修复云服务器rpm无法使用的问题
    vim 取消筛选高亮
    力扣 2021.02.25 最长公共前缀
    [模板]-Manacher
    背包问题回顾
  • 原文地址:https://www.cnblogs.com/cl1024cl/p/6204795.html
Copyright © 2011-2022 走看看