如何实现鼠标拖放文件

【Qt】Qt中的拖放操作实现——拖放文件以及自定义拖放操作 实现Qt中的拖放操——拖放文件以及自定义拖放操作 阅读详情
一.
1:取得要拖放的文件名与路径。
2:取得目标文件名与路径。
3:在拖动事件中把文件从原目录拷入目标目录。
4:取得文件图标放入TImageList。
5:以一种方式显示文件名和图标。
这里有些难度的是第四步,如何取得图标,现把刚学来的再告诉你(以在TListView显示图标为例):

在头文件中加入:#define NO_WIN32_LEAN_AND_MEAN


在.cpp中加入:

SHFILEINFO FileInfo;
THandle ImageListHandle;
ImageListHandle = SHGetFileInfo("C:/WINDOWS/Start Menu/Programs/Microsoft FrontPage.lnk", 0, &FileInfo, sizeof(FileInfo),
                        SHGFI_SYSICONINDEX ¦ SHGFI_LARGEICON);
SendMessage(lstvwVirtualList->Handle, LVM_SETIMAGELIST, LVSIL_SMALL,
                ImageListHandle);

TListItem * pItem;
SHGetFileInfo("C:/WINDOWS/Start Menu/Programs/Microsoft FrontPage.lnk", 0, &FileInfo, sizeof(FileInfo),SHGFI_ICON;SHGFI_LARGEICON);
pItem=lstvwVirtualList->Items->Add();
pItem->ImageIndex=FileInfo.iIcon;


SHGetFileInfo("C:/WINDOWS/Start Menu/Programs/DRVSPACE.EXE", 0, &FileInfo, sizeof(FileInfo),SHGFI_ICON;SHGFI_LARGEICON );
pItem=lstvwVirtualList->Items->Add();
pItem->ImageIndex=FileInfo.iIcon;

这样就可取得2个文件的图标,如果有其他文件可也再加。


二.
首先在FormCreate时调用DragAcceptFiles(this,true)注册你的程序,使得你的程序可以接受文件的DragDrop。然后处理WM_DROPFILES消息,获得DropDrag的消息,调用如下函数获得相关的参数::
UINT DragQueryFile(
    HDROP hDrop,
    UINT iFile,
    LPTSTR lpszFile,
    UINT cch
);
BOOL DragQueryPoint(
    HDROP hDrop,
    LPPOINT lppt
);

最后用下面的函数接受DragDrop的动作。
VOID DragFinish(
    HDROP hDrop
);



三.

在头文件里加上:
private:    // User declarations
    void __fastcall AcceptFiles(TMessage& Msg);
public:        // User declarations
    __fastcall TForm1(TComponent* Owner);
    BEGIN_MESSAGE_MAP
    MESSAGE_HANDLER(WM_DROPFILES,TMessage,AcceptFiles)
    END_MESSAGE_MAP(TForm)

一段代码,希望对你有些帮助:
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
    DragAcceptFiles(this->Handle,true);
}

//---------------------------------------------------------------------------
void __fastcall TForm1::AcceptFiles(TMessage& Msg)
{
    const int m_nMaxFileNameLen=255;
    int i,m_nCount;
    char m_sFileName[m_nMaxFileNameLen];
    m_nCount=DragQueryFile((HANDLE)Msg.WParam,0xffffffff,m_sFileName,m_nMaxFileNameLen);
    for(i=0;i<m_nCount;i++)
    {
        DragQueryFile((HANDLE)Msg.WParam,i,m_sFileName,m_nMaxFileNameLen);
        MessageBox(this->Handle,m_sFileName,"Drop File",MB_OK);
    }
    DragFinish((HANDLE)Msg.WParam);
}


四.

在需要拖放的窗体类中加入消息处理映射,如下:
BEGIN_MESSAGE_MAP
  MESSAGE_HANDLER(WM_DROPFILES,TWMDropFiles,WMDropFiles)
END_MESSAGE_MAP (TForm);

在相应的cpp文件进入消息处理函数,如下:
void __fastcall TForm1::WMDropFiles(TWMDropFiles &message)
{
  UINT filecount = DragQueryFile((HDROP) message.Drop, 0xFFFFFFFF, NULL, 0); //查询拖放的文件数量
  for(int n=0;n<=filecount-1;n++)
  {
  String filename;
  filename.SetLength(MAX_PATH);
  int length = DragQueryFile ((HDROP) message.Drop,n,filename.c_str (),     MAX_PATH);
  filename.SetLength (length);

  //在这儿替换你的处理代码

  }
  DragFinish ((HDROP) message.Drop);
}

在窗体类的OnCreate事件中加入如下代码,
DragAcceptFiles(Handle,true);

OK,就这么简单,另外其他窗体类控件同样可以,如ListView等
文件拖放操作 本程序主要实现文件的拖放的操作,当将图片拖动到本程序窗口时,就会在本窗口中代开该图片显示出来,主要用到的是记录文件的路径,然后打开文件 立即下载

相关推荐

文件拖拽显示文件路径[vb]

文件拖拽显示文件路径[vb]!!!!!!!!!!

Vue实现文件拖拽功能

Vue实现文件拖拽功能

Hello World 1130

javascript实现外部文件拖拽到浏览器预览

实现外部文件拖拽到浏览器打开预览,代码仅供参考

Bat 批处理拖放文件_文件名等信息提取

拖放文件们到此批处理上,echo 改成想要执行的命令 @echo off for %%i in (%*) do ( echo 文件全路径: %%i echo 文件全路径: %1 echo 短路径名: %~s1 echo 盘符+路径: %~dp1 echo 盘符: %~d1 echo 路径: %~p1 echo 文件+后缀名: %~nx1 echo 文件名: %~n1 echo 后缀名: %~x1 echo 文件属性: %~a1 echo 日期/时间: %~t1 echo

灵台方寸山斜月三星洞 4880

Openharmony 命令行工具hdc的获取与安装

OpenHarmony实战:命令行工具hdc安装应用指南_hdc工具-优快云博客t=N7T8。

Devlin_的博客 1万+

目标检测——布匹缺陷检测数据集

结构瑕疵指的是布料本身的缺陷,包括嵌结、抽纱、错纱、断纱、预缩等问题,这些问题通常是在布料生产过程中出现的。而质量瑕疵则是指布料在使用过程中出现的问题,如污渍、断裂、鼓囊、针眼等,这些问题可能由生产过程中的结构瑕疵导致,也可能是在运输、存放和使用过程中引起的。布匹瑕疵如缺纬、断纬、粗纬、松纬、缺经、断经、粗经、筘痕、污点、破损等,若未得到及时有效的检测,这些瑕疵产品可能会流向市场,导致消费者的不满和退货,严重影响企业的声誉和品牌形象。织疵包括缺经、缺纬、跳花、弓纱、错纱、厚薄段、油污渍等;

zzjlhlcd的博客 612

windows 通过鼠标点击获取文件的路径

什么也不说了,好不容易找到的,直接看代码,新建一个vs控制台程序,替换main.cpp即可 #include "stdafx.h" #include &lt;windows.h&gt; int main()` { OPENFILENAME ofn; TCHAR szOpenFileNames[80 * MAX_PATH]; TCHAR szPath[MAX_P...

张利 的博客 2277

【rk3566/3568】Android 11移植gms

【rk3566/3568】Android 11移植gms 1、前言 测试功能时,想去Google play store去下个应用测试,发现通过网页搜索总是下载不到正确的谷歌服务框架;于是就不得不去搞一个内置的gms。 2、移植 1、需要下载Android 11对应的gms的包 opengapps 2、看下文件目录 直接移植core里面的文件,GAPPs Optional按需添加 3、在vendor下创建google目录 ...

lin_ff的博客 7646

java 鼠标拖放文件的实现

 在最近作的聊天工具中,希望追加文件传输的功能。基本思想是:将文件或文件夹拖拽到聊天对话框后,释放鼠标激活drop事件后,可以得到被选择的文件或文件夹的信息,以便进行数据的传输。在网络中搜索了一番后,发现有一篇文章非常适合我的需求。下文转自《java 鼠标拖放文件的实现》原文:http://hi.baidu.com/netbusy/blog/item/11fd2c4cec09b3fdd72afc7

bolink5的专栏 5404

【FLINK+Kerberos+kafka】在华为云上 bootstrap.server使用IP的GSS initiate failed 问题处理

目前互联网上所有的资料显示都是说没有正确设置KDC之类的,但本博主实际通过java代码低版本 如使用kafka-client 0.11.0 ,2.4.0等版本手动创建kafkaconfig 或者使用华为云的LoginUtils类 都能够正常链接,所以应该是高版本添加了相关配置,或者flink在subtask 创建kafkaAdminClient时 丢弃或使用了默认的一些配置行为,导致了客户端和kdc验证之间出现了principal 不一致导致验证失败。client.dns.lookup配置项作用。

honghanyue1791的博客 574

OFDR解调全同弱反射光纤阵列

全同弱反射光纤光栅阵列是在一根光纤上密集刻写波长相同的WFBG,由于每个光栅的反射都比较弱,可实现一根光纤上复用成千上万个光栅,阵列上每个光栅栅区长度相同,相邻光栅之间栅距相同,呈周期性分布。2、获取测量信号:对弱栅阵列加载状态下,使用OFDR系统再次获取弱栅时域曲线,为测量信号。(这里需要注意的是对弱栅阵列加载后,不能使弱栅中心波长漂移到激光器波长扫描范围之外,若超出范围则OFDR技术不能获取弱栅反射信号,因此在选择弱栅阵列波长时尽量让其中心波长在激光器波长扫描范围中间,确保温度/应变测量范围。

m0_69386663的博客 1956

java鼠标拖动复制文件_java 鼠标拖放文件的实现

/** NewJFrame.java** Created on 2008年2月2日, 上午11:06*/package yyplayer;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorExc...

weixin_33445930的博客 227

真随机数与伪随机数

前面我们学习了LFSR,这个玩意落地到具体的应用是什么呢?没错是寄存器,这里在网络找到了几个回答,这里做个记录,下面一起来学习一下吧。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 1062

java 鼠标拖拽_java 鼠标拖放文件的实现

/** NewJFrame.java** Created on 2008年2月2日, 上午11:06*/package yyplayer;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorExc...

weixin_31445091的博客 245

化工设备应力分析软件:STAAD.Pro二次开发_(24).非线性分析技术

在STAAD.Pro 中,可以通过命令。

kkchenjj的博客 661

外骨骼机器人(五):步态分析之正常步态

研究病理步态之前,需要了解正常步态,作为判断标准。但是需要记住两个问题:1.“正常”因人而异,性别、年龄、身体情况都需要考虑在内,因此,需要对不同的个体选择合适的正常标准;2.即使病人的步态与正常步态有某种不同,这也不能说明这是不可取的,也不能说明应该把它变成“正常”步态。许多步态异常是对病人的一些问题的一种补偿,尽管异常,但它们仍然是有用的。步态周期的定义是连续为两次发生重复行走事件之间的时间间隔。尽管可以选择任何事件来定义步态周期,但通常使用一只脚接触地面的瞬间(“初始接触”)是方便的。

行者无疆的博客 1995

java实现鼠标拖文件上传_java 鼠标拖放文件的实现

/** NewJFrame.java** Created on 2008年2月2日, 上午11:06*/package yyplayer;import java.awt.datatransfer.DataFlavor;import java.awt.datatransfer.Transferable;import java.awt.datatransfer.UnsupportedFlavorExc...

weixin_33332712的博客 163

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

【Delphi】实现接收系统拖动文件(改进方法)

介绍Delphi中如何接受拖动文件

sensor_WU 博客 1083

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Qt拖放文件实现(Drag,Drop, MimeData )

本文讲述了基于Qt实现文件拖放操作。拖放操作至少需要两个窗口,一个作为拖放源窗口,另一个作为拖放目标窗口。

flysnow010的博客 2266

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【QT】QT实现拖放文件并复制文件功能

QT实现拖放文件并复制文件功能 目录 1.添加头文件 2.添加.h文件代码 3.添加.cpp文件代码 复制文件和文件夹 设置鼠标悬浮样式 4.效果 1.添加头文件 #include <QDragEnterEvent> #include <QUrl> #include <QMimeData> #include <QDropEvent&gt...

rong11417的博客 2023

网页制作中鼠标移到一个位置_高手必备技能 玩转鼠标拖放操作

经常见到一些“高手”或者“高高手”,快捷键运用得令人眼花缭乱。羡慕他们吗?哈,如果你觉得自己记不住那么多快捷组合键,那还有另外的选择,就是用熟、用好鼠标的“拖放”技巧,完全不输给他们哦!Windows的一个显著特色就在于支持鼠标拖放,使用拖放可以简化许多烦琐的操作。如果你没有留意过,那就请跟我来。移动和复制在资源管理器(或我的电脑)中,拖住选中的文件(夹)到目标位置,可以快速实现文件(夹)的复制或...

weixin_39541189的博客 5129

.Net通过拖放打开文件

<br />1.实现怎样通过拖放打开一张影像?<br />PictureBox 也有DragEnter事件 DragDrop事件 但是怎么样都不触发.没有AllowDrag属性。<br />Form有Allow属性。<br />只要知道鼠标现在落在PictureBox上,事件触发就行了。<br /> private void Form1_DragDrop(object sender, DragEventArgs e)<br />        {<br />            int x = this.

DaiLei831209的专栏 1094

实现文件拖放的一种简洁方法

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

小发猫 1687
上一篇: 星座们适合的英文名字
下一篇: delphitimetostring
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值