2 kobealone kobealone 于 2014.11.09 16:50 提问

C++ 实现从IE页面拖拽文件到本地

现在做了一个ATL 捕获IE页面上的拖拽事件,然后现在想通过ONDrag事件里,设定拖拽的数据源(页面上存着文件的路径),但是设定了数据源之后,无法保存到本地,求大神支援。

char szFileName[] = "D:\\user.txt";
    UINT uDropEffect;
    HGLOBAL hGblEffect;
    LPDWORD lpdDropEffect;
    DROPFILES stDrop;

    HGLOBAL hGblFiles;
    LPSTR lpData;

    uDropEffect = RegisterClipboardFormat(L"Preferred DropEffect");
    hGblEffect = GlobalAlloc(GMEM_ZEROINIT | GMEM_MOVEABLE | GMEM_DDESHARE,sizeof(DWORD));
    lpdDropEffect = (LPDWORD)GlobalLock(hGblEffect);
    *lpdDropEffect = DROPEFFECT_COPY;
    GlobalUnlock(hGblEffect);

    stDrop.pFiles = sizeof(DROPFILES);
    stDrop.pt.x = 0;
    stDrop.pt.y = 0;
    stDrop.fNC = FALSE;
    stDrop.fWide = FALSE;

    hGblFiles = GlobalAlloc(GMEM_ZEROINIT | GMEM_MOVEABLE | GMEM_DDESHARE,
        sizeof(DROPFILES)+strlen(szFileName)+2);
    lpData = (LPSTR)GlobalLock(hGblFiles);
    memcpy(lpData,&stDrop,sizeof(DROPFILES));
    strcpy(lpData+sizeof(DROPFILES),szFileName);
    GlobalUnlock(hGblFiles);
    OpenClipboard(NULL);
    EmptyClipboard();
    SetClipboardData(CF_HDROP,hGblFiles);
    SetClipboardData(uDropEffect,hGblEffect);
    CloseClipboard();

fmt.cfFormat = this->CF_PacsArticle;
    fmt.dwAspect = DVASPECT_CONTENT;
    fmt.lindex = -1;
    fmt.ptd = NULL;
    fmt.tymed = TYMED_HGLOBAL;

    //medium.hGlobal = hObject;
    medium.hGlobal = hGblFiles;
    medium.tymed = TYMED_HGLOBAL;
    medium.pUnkForRelease = NULL;
    //
    dobj = new CDataObject();
    if(dobj->SetData(&fmt, &medium, TRUE) == S_OK)
    {
        dsrc = new CDropSource();
        ret = ::DoDragDrop(dobj, dsrc, DROPEFFECT_COPY, &dwEffect);
}

1个回答

kobealone
kobealone   2014.11.10 13:48

自己顶 求大神 没人吗 着急

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
9.8Python文件操作(8):使用tkinter定位本地文件
@概述 - 每次打开文件时硬编码路径,不但是痛苦的,而且是欠灵活的; - 使用系统标准GUI库tkinter我们可以很轻松的实现可视化的文件路径选择; - API是tkinter.filedialog下的askopenfilename()和asksaveasfilename(),操作系统会弹出文件选择对话框,让用户选择一个要打开或另存为的地址 - 两个API所返回的都是字符串型的文...
前端页面点击下载,实现从mysql数据库中下载指定文件
前端页面点击下载,实现从mysql数据库中下载指定文件
HTML5应用之文件拖拽上传
使用HTML5的文件API,可以将操作系统中的文件拖放到浏览器的指定区域,实现文件上传到服务器。本文将结合实例讲解HTML5+jQuery+PHP实现拖拽上传图片的过程,来看下HTML5的魅力吧。 查看演示 HTML 我们在页面中放置一个拖拽区域#drop_area,即接收拖拽的区域,#preview用来预览拖拽上传的图片信息。  id="drop_area">将图片拖拽到此区域   
jQuery ui实现拖拽文件到文件夹案例
js:/*拖动事件开始*/ var $gallery = $(".drop-move"), //拖动对象 $trash = $(".move-in"); //接收容器 $("dd",$gallery).draggable({ //拖动 cancel:".ui-icon", revert:"invalid", containment:"documen
下载(二)客户端通过C# 代码直接从服务器下载文件到本地
局域网文件下载: public class RemoteDownload     {         public static void DownLoad(string addressUrl,string localName)         {             //下载文件             System.Net.WebClient myWebClient = new
Ajax实现Json数据传送
简单的Json_Ajax 1.实现从页面到后台的数据传输 2.实现从后台到页面的数据传输
WPF之DragDrop拖放实例
【问题】            在winform或wpf开发中,常会用到DragDrop拖放功能,如拖拽一个文件到程序窗体,则在文本控件上显示文件的路径,其他内容控件显示文件内容,这样省去输入文件路径或者打开文件对话框的麻烦。在实际应用中,我们也会看到一些影音播放器支持对拖放文件的播放,Office支持对拖放文件的插入等等。综合上述情况,多数情况下,我们关注了从程序外部拖放文件至程序,也就是拖过
HTML5拖拽本地文件
1.拖放(drag/drop) 2.拖放开始 ondragstart:调用了一个函数 drag(event),规定了被拖动的数据 3.设置拖动数据: setData():设置被拖动数据类型和值 4.
FTP文件上传与下载操作
在VB 中,用FTP协议,实现从本地服务器与另一台服务器的文件的上传和下载。
QT窗口拖拽功能简单应用
QT上实现文件拖拽功能 声明dragEnterEvent和dropEvent事件函数,对窗口的拖拽行为进行处理 // 由MainWindow来截取拖拽事件 ui->lineEdit->setAcceptDrops(false); this->setAcceptDrops(true); void dragEnterEvent(QDragEnterEvent *event); voi