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)功能的更多相关文章

  1. HTML5 之拖放(drag与drop)

    拖放(Drag 和 drop)是 HTML5 标准的组成部分. 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. HTML5 拖放实例 ...

  2. Android开发者指南-用户界面-拖放-Drag and Drop[原创译文]

      英文原文:http://developer.android.com/guide/topics/ui/drag-drop.html 版本:Android 4.0 r1 译者注:黄色底色为未决译文 快 ...

  3. 在Blazor中实现拖放(drag and drop)

    前言 我在实现一个含有待办列表功能的页面时,发现了一个好看的设计,它将待办分为--"待办","正在进行",和"已完成"三种状态,并且将待办通 ...

  4. HTML 5 拖放(Drag 和drop)

    浏览器支持 Internet Explorer 9.Firefox.Opera 12.Chrome 以及 Safari 5. 1.把标签 draggable 属性设置为 true. 2.向标签添加on ...

  5. HTML5 拖放---drag和drop

    拖放四步走:第一步:设置元素可拖放,即把 draggable属性设置为 true:  例:<div id="div" draggable="true"&g ...

  6. 拖放(Drag和Drop)--html5

    拖放,就是抓取一个对象后拖放到另一个位置.很常用的一个功能,在还没有html5的时候,我们实现这个功能,通常会用大量的js代码,再利用mousemove,mouseup等鼠标事件来实现,总的来说比较麻 ...

  7. HTML5 拖放(Drag 和 Drop)功能开发——基础实战

    随着HTML5的普及度越来越高,现在写代码也遇到一些了,经过同事的点播开展了一次Dojo活动用以技术交流,我也乘此机会将HTML5的拖放功能整理了一下. 简介 拖拽(Drag/Drop)是个非常普遍的 ...

  8. Blazor 使用拖放(drag and drop)上传文件

    在很多上传文件的应用实例中, 都可以看到[拖放文件到此上传]这种骚功能 ,今天我们就来试试Blazor能不能完成这个想法. 简述HTML5拖放 拖放是HTML5标准的一部分,任何元素都能够拖放,也能够 ...

  9. OLE文件拖放

    使用IDropTarget接口同时支持文本和文件拖放 关于Windows的外壳扩展编程,拖放是比较简单的一种,在网上可以找到不少介绍这个技巧的文章.大部分是介绍使用MFC的COleDropTarget ...

随机推荐

  1. [MySQL] MySQL中关于外键报错的解决和建议

    一.缘由 今天在恢复从库和主库不同步的数据时,看到关于外键的报错. ERROR 1451 (23000): Connot delete or update a parent row: a foreig ...

  2. 设置PDF文件默认缩放比例

  3. Oracle PLSQL Demo - 09.Open、Fetch遍历游标[Open, Fetch, Close Record CURSOR]

    declare r_emp scott.emp%rowtype; cursor cur_emp is select t.* from scott.emp t; begin open cur_emp; ...

  4. Spring Boot干货系列:(三)启动原理解析

    Spring Boot干货系列:(三)启动原理解析 2017-03-13 嘟嘟MD 嘟爷java超神学堂 前言 前面几章我们见识了SpringBoot为我们做的自动配置,确实方便快捷,但是对于新手来说 ...

  5. Ubuntu和Busybox下用make menuconfig配置出错解决

    http://blog.csdn.net/satiling/article/details/6965985 # make menuconfig In file included from script ...

  6. u-boot中添加自定义命令

    1.u-boot命令机制u-boot中,每个命令都使用一个struct cmd_tbl_s结构体定义,该定义在include/command.h中实现:struct cmd_tbl_s{ char * ...

  7. flask中的g、add_url_rule、send_from_directory、static_url_path、static_folder的用法

    Flask中的g对象是个很好的东西,主要用于在一个请求的过程中共享数据.可以随意给g对象添加属性来保存数据,非常的方便,下面的代码是一个使用g对象的例子.下面的这个例子会使用random随机产生一个0 ...

  8. 【转】【C#】判断当前操作系统

    写一个判断操作系统的工具类OSHelper.cs public class OSHelper { // 获取操作系统ID public static System.PlatformID GetPlat ...

  9. 【C#/WPF】UI控件的拖拽/拉伸

    需求①:控件拖拽——按住鼠标,可自由拖拽控件. 方法:目前看到的办法有两种. 使用ZoomableCanvas:http://www.cnblogs.com/gnielee/archive/2011/ ...

  10. Object中有哪些方法?

    有一种遗憾就是,每天都见到你,但是却不关注你!等到面试的时候才后悔莫及. Object类中有9大public方法: equals:判断两个对象"相等" hashCode:获取对象的 ...