文件拖拉的支持

原创 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             

可拖拉的Table jquery 实现

参考文档: http://www.open-open.com/lib/view/open1370175623352.html 点击在线演示,然后另存为页面,这时候只需要引4个js即可。 该方式只需要...
  • chengxuyuan20100425
  • chengxuyuan20100425
  • 2013年11月28日 20:43
  • 1724

使用dragdealer.js实现拖拉效果

dragdealer.js拖拉效果的jquery插件。 content scroller h4 { margin: 30px 0 10px 0; color: #666; font-...
  • tuoxinquyu
  • tuoxinquyu
  • 2016年03月16日 16:03
  • 1671

Android自定义拖拉窗控件

在项目中有这样一个需求,一张全屏的地图,上面覆盖一个窗口显示路线列表,而这个窗口是个拖拉窗,可以全屏,半屏,和不显示,这个跟IOS7和android中的消息栏有点像,只不过可以拖到中间。Android...
  • dfqin
  • dfqin
  • 2013年12月11日 14:26
  • 2041

【Android开发】图片拖拉功能的实现

这次记录的是实现Android图片用手拖拉的功能。 编译环境:eclipse Android版本4.0 创建工程过程略 实现图片在页面内的拖拉 原理图...
  • u013517797
  • u013517797
  • 2014年11月12日 20:16
  • 957

HTML5 拖拉上传文件

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

html中上下左右拖拉横线控制div宽度示例

效果图如下: 源码如下: 例子 ul,li{margin:0;padding:0;} body{font:14px/1.5 Arial;color:#666;} ...
  • x_men_01
  • x_men_01
  • 2016年05月30日 16:33
  • 1217

Android 拖拉控件遇到的问题

第一次写博客,写得不好不要见怪,今天主要说说 拖拉控件,希望和大家交流下。 废话不多说,进入正题。Android 提供了拖拉控件的接口,主要是  View.DragShadowBuilder类 和V...
  • qq_25984015
  • qq_25984015
  • 2015年11月18日 21:21
  • 607

HTML5拖拉上传文件

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

OS X拖拉文件获取文件路径

参考资料:苹果文档 2rd,August,2016介绍Cocoa提供了在开发的应用与其它应用间实现拖拽的相关API,分别在NSDragging.h,NSDraggingItem.h,NSDraggi...
  • Jolie_Yang
  • Jolie_Yang
  • 2016年08月02日 17:51
  • 478

Qt5文件拖放学习

Qt的文本文件拖放实现,并且解决其间遇到的dropEvent不能进入的问题
  • no_pao_spite
  • no_pao_spite
  • 2017年06月26日 14:07
  • 358
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:文件拖拉的支持
举报原因:
原因补充:

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