拖拽功能实现:有时候我们需要实现在一些控件(如编辑框、按钮、列表等)控件上实现文件拖拽的功能,方便我们对应的相关操作。
例如,需要实现在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系统下,需要额外添加如下代码即可实现拖拽函数的响应,原文链接,感谢原创者的分享!