MFC一一拖拽功能的实现

       拖拽功能实现:有时候我们需要实现在一些控件(如编辑框、按钮、列表等)控件上实现文件拖拽的功能,方便我们对应的相关操作。 

        例如,需要实现在Button按钮上拖拽文件并点击Button按钮打开,实现步骤如下:

        实现拖拽功能一般针对控件操作分为两种情况:

(1)、如果控件已经提供允许文件拖拽功能,则直接按下图所示添加相应的消息函数,同时将Accpet Files属性设置为True

(2)、如果控件没有提供文件拖拽功能,则需要以该控件对应的类作为基类,派生一个子类,此时子类就能够接受文件拖拽消息,与情况一一样的操作添加相应的消息函数,同时将Accpet Files属性设置为True

添加拖拽消息响应函数,并实现如下所示:

void CButtonST::OnDropFiles(HDROP hDropInfo)
{
	// TODO: 在此添加消息处理程序代码和/或调用默认值
	int iPos=0;
	int iLength = 0;
	CString strFilePath;
	CString strFileName;
	DragQueryFile(hDropInfo,0,strFilePath.GetBuffer(MAX_PATH),MAX_PATH);
	strFilePath.ReleaseBuffer();
	iPos = strFilePath.ReverseFind('\\');
	iLength = strFilePath.GetLength();
	//DWORD le0 = strFilePath.GetLength() * sizeof(TCHAR);
	strFileName = strFilePath.Right(iLength-iPos-1);
	SetWindowText(strFileName);
	m_strFilePath = strFilePath;
	CButton::OnDropFiles(hDropInfo);
}
void CButtonST::OnBnClicked()
{
	ShellExecute(NULL,_T("open"),m_strFilePath,NULL,NULL,SW_SHOWNORMAL);
}

然后,我发现在WIN10系统下,进行拖拽文件是没有响应的,调试时发现根本进入不了消息响应函数,于是网上查找,发现在WIN8/Vista系统下,需要额外添加如下代码即可实现拖拽函数的响应,原文链接,感谢原创者的分享!

https://blog.csdn.net/gzzxbcxm2005/article/details/44999581

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值