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

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.修改完毕之后,编译,然后拖曳文件,发现实现了!啊哈哈哈哈

搞了一天终于可以了,希望大家多多点赞,有啥不会的,加qq1577537753联系我哦,随时在线,大家加油!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

往后余生MBSE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值