热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MFC中窗口实现拖拽文件功能

MFC窗口拖拽文件功能指的是用鼠标将文件拖拽入窗口后,在窗口中可以获取拖拽文件的绝对路径,如图1所示。图1文件拖拽功能实现窗口的拖拽文件功能ÿ

MFC窗口拖拽文件功能指的是用鼠标将文件拖拽入窗口后,在窗口中可以获取拖拽文件的绝对路径,如图1所示。


1 文件拖拽功能

实现窗口的拖拽文件功能,首先要将窗口注册为放置拖拽文件的目标,之后在窗口中响应拖拽消息,获取拖拽文件的绝对路径。

1将窗口注册为放置文件的目标

将窗口注册为放置文件目标的方法有两种:一种是通过MFC资源编辑器实现,另一种方法是通过代码实现。

1.1通过MFC资源编辑器实现

VS2015中创建一个基于对话框的MFC程序。接下来在VS2015的资源视图中,选择MFC程序的主对话框,然后在右侧的“属性”选项中将对话框的“Accept Files”属性设置为True,表示将对话框注册为放置拖放文件的目标,如图2所示。

 

2 修改对话框Accept Files属性

1.2通过代码实现

在对话框的OnInitDialog()函数中通过CWnd类的DragAcceptFiles()函数将对话框注册为放置拖放文件的目标。该函数的格式为

void DragAcceptFiles( BOOL bAccept = TRUE );
该函数的参数bAccept

TRUE
时表示对话框接收拖拽的文件,
bAccept

FALSE
时表示不接受拖拽的文件。

2.文件拖拽消息的响应函数

在将窗口注册为放置文件的目标后,该窗口就可以接收文件拖拽的消息了,该消息为WM_DROPFILES

2.1 添加消息响应函数

VS2015资源管理器中选中窗口,之后在右侧的“属性”中选择“消息”,为WM_DROPFILES消息添加响应函数OnDropFiles(),如图3所示。当将文件拖拽入对话框时,OnDropFiles()函数就会被调用。

 

3 添加WM_DROPFILES消息响应函数

2.2 定义消息响应函数

OnDropFiles()函数中,获取拖拽文件的绝对路径,并在编辑框中显示出来。通过DragQueryFile()函数获取文件的绝对路径,该函数的格式为

UINT DragQueryFile(_In_ HDROP hDrop,_In_ UINT iFile,_Out_ LPTSTR lpszFile,UINT cch
);

其中,参数hDrop
包含了拖拽文件的信息;
iFile
指定了查询文件的索引号;
lpszFile
是保存文件绝对路径的缓冲区;
cch
是缓冲区的大小。如果成功获取拖拽文件的信息,则返回非零值。

在使用DragQueryFile()函数时,首先通过该函数获取拖拽文件的数量,之后遍历每个拖拽文件。一般来说,每次只拖拽一个文件。

2.2.1 获取拖拽文件的数量

通过DragQueryFile()函数获取拖拽到窗口上的文件的数量。

int count_droppedfile = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);
其中,DragQueryFile()
函数的第二个参数设置为
0xFFFFFFFF

-1
时,该函数的返回值即为拖拽文件的数量。

2.2.2 拖拽文件绝对路径的显示

2.2.1 获取拖拽文件的数量”中获取了拖拽文件的数量之后,接下来遍历拖拽到窗口的文件,获取文件的绝对路径,并且在窗口的Edit控件中显示出来。

(1)Edit控件添加成员变量

要想在Edit控件中显示拖拽文件的绝对路径,就要为该控件添加成员变量。如图4所示。

 

4 Edit控件添加变量

以上方法为窗口的编辑框控件添加了一个名为m_EditCtrl_FilePath的变量,该变量的类别为Control

(2)显示绝对路径

在对话框类的OnDropFiles()函数中,有如下代码

for (int i = 0; i {
wchar_t filepath[MAX_PATH] = { 0 };
if (DragQueryFile(hDropInfo, i, filepath, MAX_PATH)>0)
{
m_EditCtrl_FilePath.SetWindowTextW(filepath);
}
}

其中,for
循环的作用是遍历所有的拖拽文件,
count_droppedfile
是在“
2.2.1
获取拖拽文件的数量”中获取的拖拽文件数量;通过
DragQueryFile()
函数获取文件的绝对路径,并且保存在
filepath
中,最后,通过编辑框控件的变量
m_EditCtrl_FilePath
调用
SetWindowTextW()
函数将绝对路径显示出来。


推荐阅读
  • 第一步:PyQt4Designer设计程序界面该部分设计类同VisvalStudio内的设计,改下各部件的objectName!设计 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Android源码中的Builder模式及其作用
    本文主要解释了什么是Builder模式以及其作用,并结合Android源码来分析Builder模式的实现。Builder模式是将产品的设计、表示和构建进行分离,通过引入建造者角色,简化了构建复杂产品的流程,并且使得产品的构建可以灵活适应变化。使用Builder模式可以解决开发者需要关注产品表示和构建步骤的问题,并且当构建流程发生变化时,无需修改代码即可适配新的构建流程。 ... [详细]
  • 抽空写了一个ICON图标的转换程序
    抽空写了一个ICON图标的转换程序,支持png\jpe\bmp格式到ico的转换。具体的程序就在下面,如果看的人多,过两天再把思路写一下。 ... [详细]
  • Android获取app应用程序大小的方法
    Android获取app应用程序大小的方法-Android对这种方法进行了封装,我们没有权限去调用这个方法,所以我们只能通过AIDL,然后利用Java的反射机制去调用系统级的方法。 ... [详细]
  • 本文介绍了PE文件结构中的导出表的解析方法,包括获取区段头表、遍历查找所在的区段等步骤。通过该方法可以准确地解析PE文件中的导出表信息。 ... [详细]
  • 本文介绍了南邮ctf-web的writeup,包括签到题和md5 collision。在CTF比赛和渗透测试中,可以通过查看源代码、代码注释、页面隐藏元素、超链接和HTTP响应头部来寻找flag或提示信息。利用PHP弱类型,可以发现md5('QNKCDZO')='0e830400451993494058024219903391'和md5('240610708')='0e462097431906509019562988736854'。 ... [详细]
  • Go GUIlxn/walk 学习3.菜单栏和工具栏的具体实现
    本文介绍了使用Go语言的GUI库lxn/walk实现菜单栏和工具栏的具体方法,包括消息窗口的产生、文件放置动作响应和提示框的应用。部分代码来自上一篇博客和lxn/walk官方示例。文章提供了学习GUI开发的实际案例和代码示例。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文介绍了在MFC下利用C++和MFC的特性动态创建窗口的方法,包括继承现有的MFC类并加以改造、插入工具栏和状态栏对象的声明等。同时还提到了窗口销毁的处理方法。本文详细介绍了实现方法并给出了相关注意事项。 ... [详细]
  • 本文介绍了lintcode(12)题目的要求和解题思路,以及给出了相应的代码实现。题目要求在给定的字符串source中找到包括所有目标字符串字母的最短子串,并且时间复杂度为O(n)。解题思路是使用滑动窗口的方法,通过维护一个unordered_map来记录目标字符串中每个字符的出现次数,并使用双指针来寻找最小子串。代码实现部分给出了具体的实现代码。 ... [详细]
  • OCI连接MySQL_PLSQL Developer连接远程数据库OCI客户端安装方法
    本文介绍了使用OCI客户端连接MySQL和PLSQL Developer连接远程数据库的安装方法,避免了在本地安装Oracle数据库或类似的开发套件的麻烦,同时解决了PLSQL Dev连接远程Oracle时的配置问题。 ... [详细]
  • 在tp5项目中引入ueditor编辑器并实例化后插入图片出现目录创建失败问题在查看网络上各种解决方案之后总结如下:根据官网提示主要是因为图片保存的路径无权限导致,官方文档链接:ht ... [详细]
  • 引号快捷键_首选项和设置——自定义快捷键
    3.3自定义快捷键(CustomizingHotkeys)ChemDraw快捷键由一个XML文件定义,我们可以根据自己的需要, ... [详细]
author-avatar
手机用户2602886175
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有