1、自已编写专用的类,程序复杂、维护麻烦;2、必须要将文件拖到对话框中的编辑控件上,拖动的文件名才被接受,而标准的WINDOWS程序只须将文件拖放到对话框即可被接受;3、只能接受一个拖放的文件。本文要介绍的这种方法只须调用一个WINDOWS API函数DragQueryFile即可实现文件的拖放操作,而且完全克服了上述3点不足。下面先介绍一下这个函数。

---- DragQueryFile原型为:

UINT DragQueryFile( HDROP    hDrop,                    UINT      iFile,                    LPTSTR   lpszFile,                    UINT      cch )

---- 其中hDrop是指向拖动文件结构的句柄;

---- iFile 是以0开始的被托动文件的序号,因为一次可能拖动多个文件。当此参数

---- 设为0xFFFFFFFF,则函数返回拖动文件的数量;

---- lpszFile 是指向文件名的缓冲区;

---- cch 是文件名缓冲区的大小,即文件名的字符数。

---- 明确了该函数的参数后,编程就是一件很简单的事情了。以下给出一个完整的实例,程序运行后弹出一个对话框,可以拖动任意数量的文件或目录到上面,松开鼠标后,程序先显示拖放文件的数量,然后将拖放的文件名全部显示在一个List Box控件中。具体步骤如下:

  1. 建立一个基于对话框的工程drop,然后其它选项全部用缺省值。
  2. 选中IDD_DROP_DIALOG对话框中Extended Styles的Accept files属性。
  3. 给IDD_DROP_DIALOG对话框添加一个List Box 控件IDC_LIST1。
  4. 在ClassWizard中给CdropDlg类添加成员变量m_list,类型为ClistBox。
  5. 给CdropDlg类中增加处理WINDOWS消息WM_DROPFILES的函数,接受系统给出的默认名字OnDropFiles,然后输入以下代码:
void CDropDlg::OnDropFiles(HDROP hDropInfo) {  char *lpszFileName=new char[512],cFileCount[10];   int nFileCount,i;   nFileCount=::DragQueryFile    (hDropInfo,0xFFFFFFFF,NULL,512); ::AfxMessageBox(itoa(nFileCount,cFileCount,10));    for (i=0;i

---- 注意程序中的::DragFinish (hDropInfo);语句是必不可少的,它用于释放WINDOWS为处理文件拖放而分配的内存。

---- 运行此程序可以看到,拖动的文件只要一进入对话框的边界,鼠标上立刻会现一个“+”,在对话框上的任意位置释放鼠标,拖放的文件都会被接受,完全解决了《用MFC实现文件拖放到编辑框》必须将文件拖到编辑框的不足;而且拖放是通过调用WINDOWS API函数实现的,因此程序非常健壮,几乎没有什么维护量。程序在INDOWS98、vc++5.0下通过。

实现文件拖放的一种简洁方法相关推荐

  1. 文件拖放的一种简洁方法

    文件拖放的一种简洁方法 DragQueryFile即可实现文件的拖放操作,而且完全克服了上述3点不足.下面先介绍一下这个函数. ---- DragQueryFile原型为: UINT DragQuer ...

  2. Tomcat不能自动编译JSP文件问题的一种解决方法

    Tomcat不能自动编译JSP文件问题的一种解决方法 参考文章: (1)Tomcat不能自动编译JSP文件问题的一种解决方法 (2)https://www.cnblogs.com/zhouhb/p/5 ...

  3. Linux 搜索文件和文件夹的 4 种简单方法

    Linux 管理员一天都不能离开搜索文件,因为这是他们的日常活动.了解一些搜索的东西是不错的,因为这能帮助你在命令行服务器中工作.这些命令记忆起来不复杂,因为它们使用的是标准语法. 可以通过四个 Li ...

  4. 职场人士需了解:职场文件删除了三种恢复方法

    对于职场人士来讲,或多或少或许都遇到过文件误删的情况吧,例如熬夜做一周的数据,就在要完成最后一项报告的时候,因手误将文件永久删除了,或者连续加班赶的活动策划被有心之人删除了......误删职场文件是很 ...

  5. coreldraw错误代码14001_CorelDRAW文件损坏的几种解决方法

    以前做好的CorelDRAW文件突然打不开了,或者是死机.非法操作等原因造成CorelDRAW文件损坏,有时打开源文件发现一片空白,源文件保存损坏无法打开怎么办?此时不要着急,你可以试试以下几种办法帮 ...

  6. 2003服务器u盘不显示不出来,U盘文件不显示三种解决方法

    我们在使用U盘的时候,或多或少会遇到一些奇怪的问题,其中有一种就是U盘文件不显示了,明明U盘里拷贝了很多的文件,突然有一天不见了,但看U盘的容量显示又是有的,为什么会这样呢?下面就教大家解决它. 方法 ...

  7. 怎么把PDF分割成几个文件?分享几种分割方法

    PDF文件怎么分割成几个PDF文件呢?PDF文件大家都不陌生,不管是学习还是工作都会用得到,当我们遇到一份文件发现内容不完全需要,只要把它分割成几个有用的问价就可以了,应该怎么做呢?相信还有很多小伙伴 ...

  8. 文件隐藏的几种简单方法

    每个人都有一些隐私的文件或文件夹不想让别人看到,有时又不想刻意安装隐藏文件夹的软件.今天就给大家说说一些简单的文件隐藏方法. 1.最简单的方法 右击想要隐藏的文件或文件夹,在弹出的菜单中选取" ...

  9. zip文件加密的几种破解方法

    一.使用ZipCenOp.jar(需要java环境),在cmd中使用 java -jar ZipCenOp.jar r xxx.zip 成功后压缩包可以直接打开 ZipCenOp.jar 链接: ht ...

最新文章

  1. 开源 免费 java CMS - FreeCMS1.9 全文检索
  2. 关于python中requests模块导入问题-python引入requests模块报错
  3. SQL Server 负载均衡方案集锦
  4. 01_[pathlib]内置pathlib库的常用属性和方法
  5. gcc和g++的区别
  6. 联想w540笔记本参数_2020年12月笔记本电脑推荐!联想、惠普、华为笔记本电脑推荐!18款高性价比笔记本电脑推荐!!!...
  7. js 将video的第一帧 转为图片
  8. Deploy Office Communications Server 2007R2 Group Chat Server(一)
  9. 《学生快捷记账系统》——个人博客04——星期四
  10. VS2008SP1下jQuery使用初体验
  11. JMeter接口测试中,响应数据中文显示乱码的处理方法(转)
  12. 【南阳OJ分类之语言入门】80题题目+AC代码汇总
  13. 静态IP、动态IP、ADSL拨号和DNS这几者你分得清吗?
  14. Broken Pipe
  15. 解决ios微信端video全屏
  16. 苹果快捷键怎么调出来_iPad常用快捷键
  17. matlab 数据分割,科学网—MATLAB把一个包含多个站点数据的文件分割到各个站点单独的文件夹 - 张乐乐的博文...
  18. 墙外干货:如何通过风格指南驱动模块化交互设计
  19. 无需越狱或安装应用在 iPhone 和 iPad 上打开 Flash 视频
  20. for循环打印九九乘法表

热门文章

  1. 公司为什么宁愿花11K月薪招新人,也不愿意花9K的月薪留住老员工?
  2. 用友元函数重载乘法,用成员函数重载除法
  3. html video 样式修改,修改video样式代码
  4. mysql 定一个函数_mysql自定义函数
  5. rdkafka线程过多_Kafka/RocketMQ 多线程消费时如何保证消费顺序?
  6. 随机森林需要分训练集测试集吗_讨论记录用随机森林对生存数据降维,筛选signature...
  7. 基于生成对抗网络的医学数据域适应研究
  8. 【2016年第5期】多“源”异“构”培养大数据创新型人才
  9. 【软件质量】变更管理与可追踪性
  10. 【面向对象】面向对象程序设计测试题10-类的设计测试题