博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web Browser 的扩展
阅读量:4693 次
发布时间:2019-06-09

本文共 8094 字,大约阅读时间需要 26 分钟。

CComPtr
spUnk; HRESULT hr = CExternalUIHandler::_CreatorClass::CreateInstance(NULL, IID_IUnknown, (void**)&spUnk); ATLASSERT(SUCCEEDED(hr)); CComQIPtr
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
, public CComCoClass
, public IDispatchImpl
{public: CComQIPtr
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 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
*obj; CComObject
::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 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;}

转载于:https://www.cnblogs.com/cl1024cl/archive/2012/06/19/6204795.html

你可能感兴趣的文章
php生成器使用总结
查看>>
T-SQL中的indexof函数
查看>>
javascript基础之数组(Array)对象
查看>>
mysql DML DDL DCL
查看>>
RAMPS1.4 3d打印控制板接线与测试1
查看>>
python with语句中的变量有作用域吗?
查看>>
24@Servlet_day03
查看>>
初级ant的学习
查看>>
redis数据结构--String
查看>>
memcached 细究(三)
查看>>
使用svn——项目的目录布局
查看>>
RSA System.Security.Cryptography.CryptographicException
查看>>
webservice整合spring cxf
查看>>
[解题报告] 100 - The 3n + 1 problem
查看>>
Entity Framework 学习高级篇1—改善EF代码的方法(上)
查看>>
Mybatis逆向工程配置文件详细介绍(转)
查看>>
String类的深入学习与理解
查看>>
不把DB放进容器的理由
查看>>
OnePage收集
查看>>
Java parseInt()方法
查看>>