Webbrowse取消默认文件替换功能,并获取拖放文件路径列表
来源:互联网 发布:网络线上抓娃娃厂家 编辑:程序博客网 时间:2024/06/15 18:31
#include "StdAfx.h"#pragma once#include "oleidl.h"class IDropTargetImpl :public IDropTarget{public:IDropTargetImpl(void){m_def=0;}~IDropTargetImpl(void){}HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid,void** ppvObject){if(!ppvObject)return E_POINTER;if (riid==IID_IUnknown||riid==IID_IDropTarget){*ppvObject=static_cast<IDropTarget*>(this);}elsereturn (*ppvObject=0),E_NOINTERFACE;((IUnknown*)*ppvObject)->AddRef();return S_OK;}ULONG STDMETHODCALLTYPE AddRef( void){return ++m_def;}ULONG STDMETHODCALLTYPE Release( void) {ULONG Temp=--m_def;if (m_def==0){delete this;}return Temp;}HRESULT STDMETHODCALLTYPE DragEnter( /* [unique][in] */ IDataObject *pDataObj,/* [in] */ DWORD grfKeyState,/* [in] */ POINTL pt,/* [out][in] */ DWORD *pdwEffect){/*FORMATETC cFmt = {(CLIPFORMAT) CF_TEXT, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};STGMEDIUM stgMedium;HRESULT hr = pDataObj->GetData(&cFmt, &stgMedium);if (S_OK != hr){return E_FAIL;}*/return S_OK;}HRESULT STDMETHODCALLTYPE DragOver( /* [in] */ DWORD grfKeyState,/* [in] */ POINTL pt,/* [out][in] */ DWORD *pdwEffect) {return S_OK;}HRESULT STDMETHODCALLTYPE DragLeave( void) {return S_OK;}HRESULT STDMETHODCALLTYPE Drop( /* [unique][in] */ IDataObject *pDataObj,/* [in] */ DWORD grfKeyState,/* [in] */ POINTL pt,/* [out][in] */ DWORD *pdwEffect){FORMATETC cFmt = {(CLIPFORMAT) CF_HDROP, NULL, DVASPECT_CONTENT, -1, TYMED_HGLOBAL};GetDragData(pDataObj,cFmt);return S_OK;}BOOL ProcessDrop(HDROP hDrop){UINT iFiles,ich =0;TCHAR Buffer[MAX_PATH] = {0};memset(&iFiles,0xff,sizeof(iFiles));CString strFilePath;int Count = ::DragQueryFile(hDrop,iFiles,Buffer,0); //Get the Drag _Files Number.if(Count){for (int i=0;i<Count;i++){if(::DragQueryFile(hDrop,i,Buffer,sizeof(Buffer))){strFilePath = Buffer;//获取了路径做相应处理memset(Buffer,0,sizeof(Buffer) );}}}::DragFinish(hDrop);return true; }BOOL GetDragData(IDataObject *pDataObject,FORMATETC cFmt){HRESULT ret=S_OK;STGMEDIUM stgMedium;ret = pDataObject->GetData(&cFmt, &stgMedium);//GetData(CF_TEXT, &stgMedium);if (FAILED(ret)){return FALSE;}if (stgMedium.pUnkForRelease != NULL){return FALSE;}switch (stgMedium.tymed){case TYMED_HGLOBAL:{ProcessDrop((HDROP)stgMedium.hGlobal);return true;break;}default:{::ReleaseStgMedium(&stgMedium);}break;}return false;}protected:ULONG m_def;};/////////////////////////////////////////////////////////////////////////////////////////////////class IHandlerImpl :public IDocHostUIHandler{public:IHandlerImpl(void){m_def=0;}~IHandlerImpl(void){}virtual HRESULT STDMETHODCALLTYPE ShowContextMenu( /* [in] */ DWORD dwID,/* [in] */ POINT *ppt,/* [in] */ IUnknown *pcmdtReserved,/* [in] */ IDispatch *pdispReserved) {// ATLTRACE("%d,%d",ppt->x,ppt->y);return S_FALSE;}virtual HRESULT STDMETHODCALLTYPE GetHostInfo( /* [out][in] */ DOCHOSTUIINFO *pInfo) {return S_OK;}virtual HRESULT STDMETHODCALLTYPE ShowUI( /* [in] */ DWORD dwID,/* [in] */ IOleInPlaceActiveObject *pActiveObject,/* [in] */ IOleCommandTarget *pCommandTarget,/* [in] */ IOleInPlaceFrame *pFrame,/* [in] */ IOleInPlaceUIWindow *pDoc) {return S_OK;}virtual HRESULT STDMETHODCALLTYPE HideUI( void) {return S_OK;}virtual HRESULT STDMETHODCALLTYPE UpdateUI( void){return S_OK;}virtual HRESULT STDMETHODCALLTYPE EnableModeless( /* [in] */ BOOL fEnable) {return S_OK;}virtual HRESULT STDMETHODCALLTYPE OnDocWindowActivate( /* [in] */ BOOL fActivate) {return S_OK;}virtual HRESULT STDMETHODCALLTYPE OnFrameWindowActivate( /* [in] */ BOOL fActivate){return S_OK;}virtual HRESULT STDMETHODCALLTYPE ResizeBorder( /* [in] */ LPCRECT prcBorder,/* [in] */ IOleInPlaceUIWindow *pUIWindow,/* [in] */ BOOL fRameWindow) {return S_OK;}virtual HRESULT STDMETHODCALLTYPE TranslateAccelerator( /* [in] */ LPMSG lpMsg,/* [in] */ const GUID *pguidCmdGroup,/* [in] */ DWORD nCmdID) {return S_OK;}virtual HRESULT STDMETHODCALLTYPE GetOptionKeyPath( /* [out] */ LPOLESTR *pchKey,/* [in] */ DWORD dw) {return S_OK;}virtual HRESULT STDMETHODCALLTYPE GetDropTarget( /* [in] */ IDropTarget *pDropTarget,/* [out] */ IDropTarget **ppDropTarget) {IDropTarget *pDrag = new IDropTargetImpl;*ppDropTarget = pDrag;((IUnknown*)*ppDropTarget)->AddRef();return S_OK;}virtual HRESULT STDMETHODCALLTYPE GetExternal( /* [out] */ IDispatch **ppDispatch){return S_OK;}virtual HRESULT STDMETHODCALLTYPE TranslateUrl( /* [in] */ DWORD dwTranslate,/* [in] */ OLECHAR *pchURLIn,/* [out] */ OLECHAR **ppchURLOut) {return S_OK;}virtual HRESULT STDMETHODCALLTYPE FilterDataObject( /* [in] */ IDataObject *pDO,/* [out] */ IDataObject **ppDORet) {return S_FALSE;}HRESULT STDMETHODCALLTYPE QueryInterface( REFIID riid,void** ppvObject){return S_OK;}ULONG STDMETHODCALLTYPE AddRef( void){return ++m_def;}ULONG STDMETHODCALLTYPE Release( void) {ULONG Temp=--m_def;if (m_def==0){delete this;}return Temp;}protected:ULONG m_def;};
真正处理拖放的是IDropTarget,使用方法:替换默认的文件拖放,代码为
CComPtr<IHTMLDocument2> spDoc; m_HtmlEditCtrl.GetDHtmlDocument(&spDoc); CComPtr<ICustomDoc> spCustomDoc;spDoc->QueryInterface(IID_ICustomDoc, (void **)&spCustomDoc); CComPtr<IDocHostUIHandler> spDocHostUIHandler; spCustomDoc->QueryInterface(IID_IDocHostUIHandler, (void **)&spDocHostUIHandler); IDocHostUIHandler* myDocHandler = new IHandlerImpl;HRESULT r = spCustomDoc->SetUIHandler(myDocHandler);
- Webbrowse取消默认文件替换功能,并获取拖放文件路径列表
- 获取文件完整路径并存储(拖放操作)
- C#实现拖放获取文件路径
- c# 文件拖放进程序获取文件路径
- cloud foundry 默认文件路径列表
- swing选择文件并获取文件路径
- Delphi使用文件拖放功能
- WIN-API方法向表单拖放文件,文件路径及名称显示到列表框中
- 取消wfp,替换系统文件
- C#实现文件拖放并打开文件
- Android 把自己应用放在某种类型文件的打开列表,并获取文件的路径
- HTML5之拖放功能(多文件上传和元素拖放)
- kvm文件默认路径
- 保存WebBrowse中内容到文件
- 向表单拖放文件,文件路径及名称显示到列表框中(更简单的方法)
- php判断文件是否存在并设置默认路径
- 实现应用程序的文件拖放功能
- 实现文件的拖放功能(Delphi)
- 2020年中国地理信息产业产值或达万亿元
- 学习awk的好帖链接
- JavaScript在网页右下角弹出窗口 带关闭按钮 支持谷歌浏览器
- CComBSTR, _bstr_t 使用原则
- Automatically Deploy Azure App use PowerShell Command
- Webbrowse取消默认文件替换功能,并获取拖放文件路径列表
- Pthread_Mutex_t Vs Pthread_Spinlock_t (经典)
- 响应时间多长才是合适的
- 开机挂载配置 fstab UUID
- Linux正则表达式的若干例子
- Latex: 调整文档的行距?
- 今天密码被盗,而且被修改,还好找回来了
- 自己常用的OpenCV函数(不断更新中)
- Java中的事件监听