文件拖拉的支持

原创 2004年09月02日 18:35:00

现在的软件,大部分都支持文件的拖拉功能,特别是一些与文件相关的软件,:超级解霸,Winrar,它们是如何实现文件拖拉功能的呢,要解决这个问题其实最好的办法就是研究别人的软件,看看它十如何来实现的,于是我拿出dumpbin工具来检查了winrarimport table,结果如下:

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

D:/Program Files/WinRAR> dumpbin /imports winrar.exe

 

    SHELL32.DLL

                4D8764 Import Address Table

                4D871C Import Name Table

                     0 time date stamp

                     0 Index of first forwarder reference

 

                   0  DragAcceptFiles

                   0  DragFinish

                   0  DragQueryFileA

0         DragQueryFileW

……

当然了,winrarimport table 远不止这些,据我统计,它使用了8dll的提供的363个函数,由函数的名称大概就可以知道文件的拖动功能由shell.dll的四个以drag开头的函数提供,你也可以去查msdn来核实一下。好了既然这四个函数提供了文件的拖拉功能,那下面就来看一看这些函数的原型吧,它们的声明如下(资料来自msdn)

 

  
  

有了以上的操作步骤,文件的拖拉功能就变得简单多了,以下就是一个支持文件拖动功能的范例程序,它的功能是显示拖拉过来的文件的文件名及其路径,它是用Borland C++ Builder所写,部分代码如下:

 

激活及取消文件拖拉功能的代码:

 

void __fastcall TForm1::FormCreate(TObject *Sender)

{

    DragAcceptFiles(Handle, true); //进入接受文件拖拉的状态

}

//---------------------------------------------------------------------------

 

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

    DragAcceptFiles(Handle, false); //退出接受文件拖拉的状态

}

 

处理WM_DROPFILES的代码:

 

void __fastcall TForm1::DropFiles(TWMDropFiles& msg)

{

    //取得拖动文件数

  int num = DragQueryFile((HDROP)msg.Drop, 0xFFFFFFFF, NULL, 0);

  StaticText2->Caption="文件数:"+AnsiString(num);

    //将拖拉来的文件名及路径依次放入列表框

  ListBox1->Items->Clear();

  for (int i = 0; i < num; i++) {

    char buffer[256];

    DragQueryFile((HDROP)msg.Drop, i, buffer, sizeof(buffer));

    ListBox1->Items->Add(buffer);

  }

    //结束文件的拖动操作

  DragFinish((HDROP)msg.Drop);

}

 

将消息与处理消息的函数相关联的代码:

 

BEGIN_MESSAGE_MAP

    VCL_MESSAGE_HANDLER(WM_DROPFILES, TWMDropFiles, DropFiles);

END_MESSAGE_MAP(TForm);

BEGIN_MESSAGE_MAPVCL_MESSAGE_HANDLEREND_MESSAGE_MAP是实现消息与处理消息函数观念的三到宏

 

好了,文件的拖拉功能就介绍到这里,如果您对本程序感兴趣的话,可以到http://www.zccfamily.com/zqget/ 网址下载该程序的工程文件。如果你有与我交流的想法,我的联系方式:email:zqget@msn.com             

HTML中的拖拉框----在路上(29)

拖拽框---当鼠标按在指定的区域才可进行拖拽 思想:只有当鼠标是按在一个大div里的小div才可拖拽,其他不可;拖拽框有多种方法,这里以其中一种分享; 下面使我自己写的demo,简单有效供分享,不足之...
  • qq_36995398
  • qq_36995398
  • 2017-01-05 16:22:29
  • 289

HTML5 拖拉上传文件

必须懂得的基础: 拖拽事件: 拖动区事件: dragstart:开始拖动时,触发   dragend:停止拖动时,触发  drag:鼠标拖动过程中触发 投放区事件: dragenter:拖动...
  • scqdscy1994
  • scqdscy1994
  • 2016-12-06 10:44:06
  • 791

Unity3D拖拉组件

public static GameObject createPanel(GameObject parent, string panelName, Vector3 pos, bool parentCa...
  • linxinfa
  • linxinfa
  • 2015-05-19 19:28:43
  • 717

HTML5拖拉上传文件

在HTML5的pc上面实现了相当多的功能,工作中也用到了拖拉上传,特地记录下该功能 在拖动目标上触发事件 (源元素): ondragstart - 用户开始拖动元素时触发 ondrag - 元素...
  • qq_20334295
  • qq_20334295
  • 2017-01-11 11:03:42
  • 236

Nginx搭建流媒体

1.  概述 本文档主要介绍通过nginx来搭建流媒体,通过jwplayer来播放视频,让其支持播放时的拖拽。 2.  搭建过程 一、FLV视频发布方式简介 FLV视频有两总发布方式 1、 ...
  • likun557
  • likun557
  • 2014-06-26 16:41:08
  • 545

MD5 和 SHA1 工具

  • 2013年10月31日 17:44
  • 40KB
  • 下载

Notepad++文档显示工具

  • 2010年10月24日 18:39
  • 2.02MB
  • 下载

拖动的脚本 拖拉js,让表格在页面上可以托动

拖动的脚本 拖拉js,让表格在页面上可以托动var currentMoveObj = null;    //当前拖动对象var relLeft;    //鼠标按下位置相对对象位置var relTop...
  • wenzhoufeng
  • wenzhoufeng
  • 2006-02-25 13:31:00
  • 1426

JavaScript实现拖拽预览,AJAX小文件上传

本地上传,提前预览(图片,视频) 1.html中div标签预览显示,button标签触发上传事件。 将图片拖拽到此 ajax上传 2.禁止浏览器打开文件行为 document.addEventL...
  • Zph1234
  • Zph1234
  • 2016-01-10 22:14:09
  • 1921

genymotion一直不能拖拉文件

以前genymotion一直不能拖拉文件,原来是“以管理员身份运行”的问题,取消后删除所有权限即可,顺便发一个genymotion无法安装部分app的解决压缩包, https://yunpan.cn...
  • a1031397017
  • a1031397017
  • 2016-03-23 00:20:34
  • 252
收藏助手
不良信息举报
您举报文章:文件拖拉的支持
举报原因:
原因补充:

(最多只允许输入30个字)