实现窗口的文件拖放功能

123 篇文章 1 订阅

         在很多应用程序中,多用到了文件的拖放功能,它使程序交互更加友好,那么它是如何实现的呢?

其实原理很简单,首先设置窗口的属性AcceptFiles,可以通过在窗口或控件的属性页中勾选Accept Files,也可以通过调用CWnd类的成员函数DragAcceptFiles(TRUE)或API函数DragAcceptFiles(HWND hWnd,BOOL fAccept),可以在OnCreate或OnInitDialog之类的函数中调用,它们的效果都是一样的。

       其次,添加WM_DROPFILES消息的响应函数OnDropFiles。

void CDragFileDlg::OnDropFiles(HDROP hDropInfo)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	// 定义一个缓冲区来存放读取的文件名信息
	TCHAR szFileName[MAX_PATH + 1] = {0};
	CString csShow;
	m_edtList.GetWindowText(csShow);


	int nFiles = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);

	for (int i=0; i<nFiles; i++)
	{
		DragQueryFile(hDropInfo, i, szFileName, MAX_PATH);
		csShow += CString(szFileName);
		csShow += "\r\n";
	}

	m_edtList.SetWindowText(csShow);

	DragFinish(hDropInfo);
	CDialog::OnDropFiles(hDropInfo);
}
该函数的功能是在编辑控件上显示我们拖放的文件名称。其中对于DropFile有几个需要注意的地方。
文件索引编号(用于指明所要查询文件的序号, 如果拖进多个文件,则索引编号从零开始),如果iFile值为 0xFFFFFFFF 时,返回的是拖曳到窗体上的文件的个数。如果iFile值在0和拖拽文件总数之间时,DragQueryFile拷贝与文件名存储缓冲区大小适应的文件名称到缓冲区中。其次就是完成操作后一定要调用DropFinsih()释放资源。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值