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. C++虚函数表与虚析构函数

    1.静态联编和动态联编联编:将源代码中的函数调用解释为要执行函数代码. 静态联编:编译时能确定唯一函数.在C中,每个函数名都能确定唯一的函数代码.在C++中,因为有函数重载,编译器须根据函数名,参数才 ...

  2. Mac OSX系统、Linux、Windows命令行教程

    目录 Mac OSX系统.Linux.Windows命令行教程 一.各系统终端的使用方法 二.各系统命令的功能 Mac OSX系统.Linux.Windows命令行教程 用你的终端做一些事情 (com ...

  3. win32串口编程

    翻译自:ms-help://MS.MSDNQTR.v80.chs/MS.MSDN.v80/MS.WIN32COM.v10.en/dnfiles/html/msdn_serial.htm 老外写的文章, ...

  4. js判断字符是否存在汉字的方法

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. LeetCode: Swap Nodes in Pairs 解题报告

    Swap Nodes in Pairs Given a linked list, swap every two adjacent nodes and return its head. For exam ...

  6. javascript publish/subscribe or observer pattern

     定义 定义一对多的对象封装,目标对象状态发生变化,它所有的接受者都会收到通知并做相应的更新. 使用频率:5/5 最高 概要 观察者模式,也就是发布者/订阅者模式,当发布者发布一个通知的时候,订阅者就 ...

  7. iostbleView刷新后显示指定cell

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.01 * NSEC_PER_SEC)), dispatch_get_main_q ...

  8. am335x PDK3.0 设置为单网口配置记录

    原来的配置是双网口的,现在要配置为单网口. 一直以为这个配置是在 make menuconfig 里面, 没想到是在设备树里面. 修改设备树 // vim arch/arm/boot/dts/am33 ...

  9. ExtJs GridPanel 给表格行或者单元格自定义样式

    Ext.onReady(function(){ Ext.create('Ext.data.Store', { storeId:'simpsonsStore', fields:['name', 'ema ...

  10. 支持向量机(SVM)(三)-- 最优间隔分类器(optimal margin classifier)

    在之前为了寻找最有分类器,我们提出了例如以下优化问题: 在这里我们能够把约束条件改写成例如以下: 首先我们看以下的图示: 非常显然我们能够看出实线是最大间隔超平面,如果×号的是正例,圆圈的是负例.在虚 ...