继承IDropSource和IDataObject的文件拖拽,为何无法成功将文件发送到指定窗口??
在 DoDragDrop中返回值为DRAGDROP_S_DROP,但是却没有移动文件???我的代码哪里写错了????
下面这个是我在鼠标移动时的代码。。。 。。
其中CIDropSource和CIDataObject的类在这里下载代码。。。Download source - 3.8 Kb
http://www.codeproject.com/Articles/12342/Drag-and-Drop-Listbox-Items-using-OLE
下面这个是我在鼠标移动时的代码。。。 。。
其中CIDropSource和CIDataObject的类在这里下载代码。。。Download source - 3.8 Kb
http://www.codeproject.com/Articles/12342/Drag-and-Drop-Listbox-Items-using-OLE
bool CImageItem::DragDropTo2(QString path, int DropStyle)
{
OleInitialize(NULL); // needed for Drag and Drop
CIDropSource* src = new CIDropSource;
if (src == nullptr) return false;
CIDataObject* obje = new CIDataObject(src);
if (obje == nullptr)
{
OleUninitialize();
delete src;
return false;
}
FORMATETC fmtetc = { CF_TEXT, 0, DVASPECT_CONTENT, -1, TYMED_HGLOBAL };
STGMEDIUM stgmed = { TYMED_HGLOBAL, { 0 }, 0 };
STGMEDIUM dest = { TYMED_HGLOBAL, { 0 }, 0 };
stgmed.hGlobal = GlobalAlloc(GMEM_MOVEABLE, strlen(path.toLatin1().data()) + 1);
char *pChar = (char *)GlobalLock(stgmed.hGlobal);
strcpy(pChar, path.toLatin1().data());
GlobalUnlock(stgmed.hGlobal);
obje->CopyMedium(&dest, &stgmed, &fmtetc);
DWORD dwEffect;
DWORD dwResult;
dwResult = DoDragDrop(obje, src, DROPEFFECT_COPY | DROPEFFECT_MOVE, &dwEffect);
if (dwResult == DRAGDROP_S_DROP)
{
//通过调试输出,这里是成功的。
OutputDebugString(L"[3dh] ok");
if (dwEffect & DROPEFFECT_MOVE)
{
//这里并没有过来。。。。
OutputDebugString(L"[3dh] ok2");
}
}
else if (dwResult == DRAGDROP_S_CANCEL)
{
OutputDebugString(L"[3dh] no");
}
//正常来说这里应该有上面两个指针的Release()。但是如果Release会崩掉。。。这是问题2.。。。
if (obje != null)
obje->Release() //崩溃。
if (src != null)
src->.RElease();
OleUninitialize();
return true;
}
...全文
相关推荐
windows sdk 实现鼠标拖拽文件动作源码
windows sdk 实现在程序界面中鼠标拖拽制定的系统文件发送到指定位置
vc++ 拖拽功能 源代码
vc 拖拽功能vc 拖拽功能vc 拖拽功能vc 拖拽功能vc 拖拽功能vc 拖拽功能vc 拖拽功能vc 拖拽功能vc 拖拽功能
Windows资源管理器文件拖拽
VS2008 win32应用程序 DragQueryFile
windows drag/drop拖放操作示例代码
windows平台上实现IDropSource、IDropTarget和IDataObject接口,实现拖放功能。拖放功能包含源和目标两块,可以单独实现,也可以同时实现拖和放两个功能。
DropFileDemo.7z
IDropSource,IDataObject,IDropTarget 等实现, 模拟让自己窗口的文件能够拖动到系统资源管理器,获取其他应用软件能够接受拖动文件信息的窗口中。 本资源实现了该操作 代码,附有使用Demo。支持win32 , MFC 等


