MFC文本框通常不自带文件拖曳获取文件名功能,需要自己去实现,下面我们就介绍一下如何实现的,其实过程很简单:
1.,先不实现文本框的文件拖曳获取文件夹功能,先实现对话框的文件拖曳获取文件功能
右键对话框,类向导,找到消息里的WM_DROPFILES,左键点击,双击OnDropFiles函数
文章图片
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);
}
设置对话框的属性
文章图片
3.接下来是很需要大家注意的
以上函数ChildWindowFromPoint()会出现一个问题,即控件排列顺序问题。获取控件位置时如果其他控件覆盖文本框控件,开发者不知道,则获取到的控件错误,所以需要修改控件顺序。
ctrl+D出现如下界面
文章图片
此时要注意文本框控件的数字要小于容易覆盖它的其他控件的数字,如17/18/19编辑框小于28组控件,这样文本框控件不会被覆盖
文章图片
修改顺序的话,先ctrl+D,然后依次点击控件就可以修改了
4.修改完毕之后,编译,然后拖曳文件,发现实现了!啊哈哈哈哈
【c++|MFC文本框文件拖曳实现,简单好用!网上找了很久,还是自己解决了】搞了一天终于可以了,希望大家多多点赞,有啥不会的,加qq1577537753联系我哦,随时在线,大家加油!
推荐阅读
- 个人日记|K8s中Pod生命周期和重启策略
- 学习分享|【C语言函数基础】
- C++|C++浇水装置问题
- 数据结构|C++技巧(用class类实现链表)
- C++|从零开始学C++之基本知识
- 步履拾级杂记|VS2019的各种使用问题及解决方法
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- 动态规划|暴力递归经典问题
- 麦克算法|4指针与队列
- 遇见蓝桥遇见你|小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题