c++|MFC文本框文件拖曳实现,简单好用!网上找了很久,还是自己解决了

MFC文本框通常不自带文件拖曳获取文件名功能,需要自己去实现,下面我们就介绍一下如何实现的,其实过程很简单:
1.,先不实现文本框的文件拖曳获取文件夹功能,先实现对话框的文件拖曳获取文件功能
右键对话框,类向导,找到消息里的WM_DROPFILES,左键点击,双击OnDropFiles函数
c++|MFC文本框文件拖曳实现,简单好用!网上找了很久,还是自己解决了
文章图片

2.在函数中添加如下代码:
void CBatch_ProcessDlg::OnDropFiles(HDROP hDropInfo)
{
// TODO:在此添加消息处理程序代码和/或调用默认值
TCHAR lpszFile[1024];
UINT numFiles;
POINT dragPt;
numFiles = DragQueryFile(hDropInfo, 0xFFFF, NULL, 0);
DragQueryFile(hDropInfo, 0, lpszFile, MAX_PATH);
DragQueryPoint(hDropInfo, &dragPt); //获取拖曳时鼠标所指的对话框中位置坐标
DragFinish(hDropInfo);
do
{
CWnd *pWnd = ChildWindowFromPoint(dragPt); //使用获取到的对话框位置坐标识别所在位置控件
if (pWnd == NULL)
break;
TCHAR chClassName[64];
if (!GetClassName(pWnd->m_hWnd, chClassName, 64))
break;
if (_tcscmp(chClassName, _T("Edit")) == 0)//如果鼠标位置处的控件是文本框则把拖曳的文件名写到文本框
pWnd->SetWindowText(lpszFile);
} while (0);
CDialogEx::OnDropFiles(hDropInfo);
}
设置对话框的属性
c++|MFC文本框文件拖曳实现,简单好用!网上找了很久,还是自己解决了
文章图片

3.接下来是很需要大家注意的
以上函数ChildWindowFromPoint()会出现一个问题,即控件排列顺序问题。获取控件位置时如果其他控件覆盖文本框控件,开发者不知道,则获取到的控件错误,所以需要修改控件顺序。
ctrl+D出现如下界面
c++|MFC文本框文件拖曳实现,简单好用!网上找了很久,还是自己解决了
文章图片

此时要注意文本框控件的数字要小于容易覆盖它的其他控件的数字,如17/18/19编辑框小于28组控件,这样文本框控件不会被覆盖
c++|MFC文本框文件拖曳实现,简单好用!网上找了很久,还是自己解决了
文章图片


修改顺序的话,先ctrl+D,然后依次点击控件就可以修改了
4.修改完毕之后,编译,然后拖曳文件,发现实现了!啊哈哈哈哈
【c++|MFC文本框文件拖曳实现,简单好用!网上找了很久,还是自己解决了】搞了一天终于可以了,希望大家多多点赞,有啥不会的,加qq1577537753联系我哦,随时在线,大家加油!

    推荐阅读