拖放功能 - WM_DROPFILES

1、文件管理器拖放原理及实例这种方式的实质就是产生一个消息WM_DROPFILES。主要用到三個 API函数:DragQueryFile、DragQueryPoint、DragFinish。UINT DragQueryFile(HDROP hDrop, UINT iFile, LPTSTR lpszFile, UINT cch) hDrop:指向含有被拖放的文件名的结构体的句柄; iFiles:是要查询的文件序号,因为一次可能同时拖动很多个文件; lpszFiles:是出口缓冲区指针,保存iFiles指定序号的文件的路径名, cch指定该缓冲区的大小。 作用:取得拖放的文件名,有两点值得注意: 第一,若 iFile为0xFFFFFFFF,将忽略lpszFile和cch参数,返回拖放操作的文件数目; 第二,若 lpszFile为NULL,则函数将返回实际所需的缓冲区长度。 BOOL DragQueryPoint(HDROP hDrop, LPPOINT lppt); lppt:指向POINT结构体的指针,用来保存文件放下时,鼠标指针的位置。 窗口可以调用该函数以查询文件是否落在自己的窗口矩形中。 作用:用来获取,当拖放操作正在进行时,鼠标指针的位置。 void DragFinish(HDROP hDrop); 作用:当拖放操作处理完毕后需调用该函数释放系统分配来传输文件名的内存。 實作講解: 首先,建立一个对话框工程,确保选中对话框的Accept Files属性。 or在窗口创建的时候(譬如OnCreate函数中)调用DragAcceptFiles(TRUE)。 映射 WM_DROPFILES 消息。函数原型如下:void OnDropFiles(HDROP hDrop), 注意入口参数 HDROP,是一个结构体指针,所指向的结构体中包含了被拖放的文件的名称。 接下来我们主要要完成两个动作: 一:通过调用DragQueryFile并指定其iFile参数为0xFFFFFFFF, 得到本次拖放操作的文件数目; 二:用一个循环依次取出各个文件名。示例如下:void CListCtrlEx::OnDropFiles(HDROP hDrop){ char szFilePathName[_MAX_PATH+1] = {0}; UINT nNumOfFiles = DragQueryFile(hDrop, 0xFFFFFFFF, NULL, 0); //得到文件个数 for (UINT nIndex=0 ; nIndex< nFileCount; ++nIndex) { DragQueryFile(hDrop, nIndex, szFilePathName, _MAX_PATH); //得到文件名 } DragFinish(hDrop);}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值