VC++ :实现简单的文件拖放(Drag and Drop)功能
1) VC++ 6.0 新建一个基于对话框的MFC的工程,取名MfcDropFiles;
2) 去除默认的控件,包括确定/取消按钮,以及一个静态文本;
3) 在对话框空白区域拖放一个ListBox控件,ID为ID_LIST_FILE,设置属性Accept files;

4)为MfcDropFilesDlg添加消息WM_DROPFILES
afx_msg void OnDropFiles(HDROP hDropInfo);
ON_MESSAGE(WM_DROPFILES,OnDropFiles) void CMfcDropFilesDlg::OnDropFiles( HDROP hDropInfo )
{
int DropCount = DragQueryFile(hDropInfo, -, NULL, );
for(int i=; i < DropCount; i++)
{
TCHAR szFullFileName[MAX_PATH];
DragQueryFile(hDropInfo, i, szFullFileName, MAX_PATH);
m_ListBox.AddString(szFullFileName);
}
DragFinish(hDropInfo); CDialog::OnDropFiles(hDropInfo);
}
5) 实现窗口可拖放改变大小,控件随窗口大小一起改变
对话框窗口大小可改变:设置对话框属性Styles->Border为Resizing

定义成员变量m_rect记录对话框窗口的大小,自定义函数ChangeSize,重载WM_SIZE消息,具体代码如下:
// MfcDropFilesDlg.h
private:
CRect m_rect;
void ChangeSize(UINT nID,int cx,int cy); // Generated message map functions
//{{AFX_MSG(CMfcDropFilesDlg)
...
afx_msg void OnDropFiles(HDROP hDropInfo);
afx_msg void OnSize(UINT nType, int cx, int cy);
//}}AFX_MSG
DECLARE_MESSAGE_MAP() // MfcDropFilesDlg.cpp
BEGIN_MESSAGE_MAP(CMfcDropFilesDlg, CDialog)
//{{AFX_MSG_MAP(CMfcDropFilesDlg)
...
ON_MESSAGE(WM_DROPFILES,OnDropFiles)
ON_WM_SIZE()
//}}AFX_MSG_MAP
END_MESSAGE_MAP() void CMfcDropFilesDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy); if(SIZE_MINIMIZED != nType)
{
ChangeSize(IDC_LIST_FILE, cx, cy);
GetClientRect(&m_rect);
}
} void CMfcDropFilesDlg::ChangeSize( UINT nID,int cx,int cy )
{
CRect rect;
CWnd* pWnd = GetDlgItem(nID);
if (!pWnd)
{
return;
}
pWnd->GetWindowRect(&rect); // 获取控件的区域大小
ScreenToClient(&rect); // 将控件大小转换为在对话框中的区域坐标
// 调整控件大小
rect.left = rect.left * cx/ m_rect.Width();
rect.right = rect.right * cx / m_rect.Width();
rect.top = rect.top * cy/ m_rect.Height();
rect.bottom = rect.bottom * cy / m_rect.Height();
// 执行控件大小调整
pWnd->MoveWindow(rect);
}
6)运行结果


/*****************************************************************************************************************************/
Syntax
UINT DragQueryFile( HDROP hDrop,
UINT iFile,
LPTSTR lpszFile,
UINT cch
);
Parameters
hDrop
Identifier of the structure containing the file names of the dropped files.
iFile
Index of the file to query. If the value of the iFile parameter is 0xFFFFFFFF, DragQueryFile returns a count of the files dropped.
If the value of the iFile parameter is between zero and the total number of files dropped, DragQueryFile copies the file name with the corresponding value to the buffer pointed to by the lpszFile parameter.
lpszFile
The address of a buffer to receive the file name of a dropped file when the function returns. This file name is a null-terminated string. If this parameter is NULL, DragQueryFile returns the required size, in characters, of the buffer.
cch
Size, in characters, of the lpszFile buffer.
Return Value
When the function copies a file name to the buffer, the return value is a count of the characters copied, not including the terminating null character.
If the index value is 0xFFFFFFFF, the return value is a count of the dropped files. Note that the index variable itself returns unchanged, and will therefore remain 0xFFFFFFFF.
If the index value is between zero and the total number of dropped files and the lpszFile buffer address is NULL, the return value is the required size, in characters, of the buffer, not including the terminating null character.
/*****************************************************************************************************************************/
代码下载:(仅供参考)
百度云:http://pan.baidu.com/s/1bpMlgvH 密码:g0fu
VC++ :实现简单的文件拖放(Drag and Drop)功能的更多相关文章
- HTML5 之拖放(drag与drop)
拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. HTML5 拖放实例 ...
- Android开发者指南-用户界面-拖放-Drag and Drop[原创译文]
英文原文:http://developer.android.com/guide/topics/ui/drag-drop.html 版本:Android 4.0 r1 译者注:黄色底色为未决译文 快 ...
- 在Blazor中实现拖放(drag and drop)
前言 我在实现一个含有待办列表功能的页面时,发现了一个好看的设计,它将待办分为--"待办","正在进行",和"已完成"三种状态,并且将待办通 ...
- HTML 5 拖放(Drag 和drop)
浏览器支持 Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5. 1.把标签 draggable 属性设置为 true. 2.向标签添加on ...
- HTML5 拖放---drag和drop
拖放四步走:第一步:设置元素可拖放,即把 draggable属性设置为 true: 例:<div id="div" draggable="true"&g ...
- 拖放(Drag和Drop)--html5
拖放,就是抓取一个对象后拖放到另一个位置.很常用的一个功能,在还没有html5的时候,我们实现这个功能,通常会用大量的js代码,再利用mousemove,mouseup等鼠标事件来实现,总的来说比较麻 ...
- HTML5 拖放(Drag 和 Drop)功能开发——基础实战
随着HTML5的普及度越来越高,现在写代码也遇到一些了,经过同事的点播开展了一次Dojo活动用以技术交流,我也乘此机会将HTML5的拖放功能整理了一下. 简介 拖拽(Drag/Drop)是个非常普遍的 ...
- Blazor 使用拖放(drag and drop)上传文件
在很多上传文件的应用实例中, 都可以看到[拖放文件到此上传]这种骚功能 ,今天我们就来试试Blazor能不能完成这个想法. 简述HTML5拖放 拖放是HTML5标准的一部分,任何元素都能够拖放,也能够 ...
- OLE文件拖放
使用IDropTarget接口同时支持文本和文件拖放 关于Windows的外壳扩展编程,拖放是比较简单的一种,在网上可以找到不少介绍这个技巧的文章.大部分是介绍使用MFC的COleDropTarget ...
随机推荐
- ruby,python及curl post请求
#飘红部分为变量 test_url="http://test" body_hash={"value"=>100, "year"=> ...
- css3导航hover悬停效果
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta http ...
- kafka传数据到Flink存储到mysql之Flink使用SQL语句聚合数据流(设置时间窗口,EventTime)
网上没什么资料,就分享下:) 简单模式:kafka传数据到Flink存储到mysql 可以参考网站: 利用Flink stream从kafka中写数据到mysql maven依赖情况: <pro ...
- Ubuntu C/C++开发环境的安装和配置
安装ubantu会自动安装GCC,但是这个GCC什么文件都不能编译,因为没有一些必须的头文件,所以要安装build-essential这个软件包,安装了这个包会自动安装上g++,libc6-dev,l ...
- 每日英语:Some Chinese Students Stay Home to Get Ahead
Li Shan's oldest son was the perfect candidate to join the throngs of Chinese students studying abro ...
- Freemarker-2.3.22 Demo - No04_条件判断
package No04_条件判断; import java.io.File; import java.io.FileOutputStream; import java.io.OutputStream ...
- 双系统中ubuntu的安装方法
双系统中ubuntu的安装方法 注意:给电脑安装双系统时,一定要先装Windows系统,再安装Linux系统! 原因是电脑开机后,要先执行一段bootloader引导程序:再由引导程序启动操作系统.W ...
- 【翻译自mos中文文章】重建控制文件的方法
重建控制文件的方法 參考原文: How to Recreate a Controlfile (Doc ID 735106.1) 适用于: Oracle Database - Enterprise Ed ...
- 【C#/WPF】用System.Timers.Timer计时器做浮窗广告
需求:鼠标静止一段时间后,显示浮窗广告. 思路:界面XAML写好一个专门显示浮窗广告的Canvas,先设为不可见Visibility=”Collapsed”,然后用System.Timers.Time ...
- C#操作摄像头 实现拍照功能
从正式工作以来一直做的都是基于B/S的Web开发,已经很长时间不研究C/S的东西了,但是受朋友的委托,帮他做一下拍照的这么个小功能.其实类似的代码网上有很多,但是真的能够拿来运行的估计也没几个.本来是 ...