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

MFC文本框通常不自带文件拖曳获取文件名功能,需要自己去实现,下面我们就介绍一下如何实现的,其实过程很简单:

1.,先不实现文本框的文件拖曳获取文件夹功能,先实现对话框的文件拖曳获取文件功能

   右键对话框,类向导,找到消息里的WM_DROPFILES,左键点击,双击OnDropFiles函数

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

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出现如下界面

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

此时要注意文本框控件的数字要小于容易覆盖它的其他控件的数字,如17/18/19编辑框小于28组控件,这样文本框控件不会被覆盖

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

 

修改顺序的话,先ctrl+D,然后依次点击控件就可以修改了

4.修改完毕之后,编译,然后拖曳文件,发现实现了!啊哈哈哈哈

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

你可能感兴趣的:(c++,MFC技术总结)