拖拽文件获取目录

1.修改对话框属性,在Extended Styles标签页中勾选"Accept files" 选项;

2.增加对话框窗口的WM_DROPFILES消息响应函数;

       注意,默认的对话框程序中屏蔽了许多Window消息,如果你在默认的工程中去找这个Events,你会发现你找不到WM_DROPFILES消息。此时,打开MFC ClassWizard,切换到Class Info标签页,选择左下方的Message filterWindow即可。

3.在相应函数void C**Dlg::OnDropFiles(HDROP hDropInfo) 中,添加如下代码可以获取拖入的文件的完整文件名:

	CHAR szPathName[MAX_PATH];
	::DragQueryFile(hDropInfo, 0, szPathName, MAX_PATH);
	::DragFinish(hDropInfo);
	SetDlgItemText(IDC_EDIT1,szPathName); //IDC_EDIT1 为对话框中添加的Edit控件,用以显示路径
如果希望鼠标能够一次性拖入多个文件,那么需要用到如下代码:

CString strCount;
char * lpszFileName = new char[1024];
int  nFileCount = ::DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 1024);   // 获取拖入的文件数量
strCount.Format("您拖入了%i个文件", nFileCount);
AfxMessageBox(strCount);
for (int i=0; i<nFileCount; i++)
{
    UINT nChars = ::DragQueryFile(hDropInfo, i, lpszFileName,1024);   // 获取拖入的第i个文件的文件名
    CString strTemp(lpszFileName, nChars);
    AfxMessageBox(strTemp);
}
::DragFinish (hDropInfo);
delete[] lpszFileName;

DragQueryFile函数的用法:

UINT DragQueryFile(

  HDROPhDrop,       // 存放所拖放文件名称的数据结构的句柄,也就是文件名缓冲区的句柄
  
    UINTiFile,        // 文件索引编号(用于指明所要查询文件的序号, 如果拖进多个文件,则索引编号从零开始),
                      // 当iFile值为0xFFFFFFFF 时,返回的是拖曳到窗体上的文件的个数。当iFile值在0和拖拽文件
                      // 总数之间时,DragQueryFile拷贝与文件名存储缓冲区大小适应的文件名称到缓冲区中。
  
    LPTSTRlpszFile,   // 函数返回时,用于存储拖拽文件名称的缓冲区指针。文件名称是一个以空终止“\0”结尾的字符串。
                      // 如果此参数是NULL,DragQueryFile函数返回拖拽的文件数目。

  UINTcch         // 存储拖拽文件名称缓冲区的大小,即lpszFile指针所指缓冲区的字符数。

);


采集
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值