打开文件对话框和文件拖曳功能

打开文件对话框和文件拖曳功能

打开文件对话框

生成一个编辑框控件绑定变量m_szPath,一个按钮控件添加事件OnBnClickedButtonBrowse()。

void CMFC06FileBrowseDlg::OnBnClickedButtonBrowse()
{
    // TODO: 在此添加控件通知处理程序代码
    // 过滤器
    static TCHAR BASED_CODE szFilter[] = _T("JPG (*.jpg)|*.jpg|")
        _T("BMP文件 (*.bmp)|*.bmp|")
        _T("PNG文件 (*.png)|*.png|")
        /*_T("All Files (*.*)|*.*||")*/;

    
    CFileDialog Filedlg(TRUE, _T(""), NULL,
        OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
        szFilter, NULL);
    
    // 弹出对话框
    if (Filedlg.DoModal() != IDOK)
    {
        return;
    }
    // 把获取的路径更新到对话框里
    m_szPath = Filedlg.GetPathName();

    UpdateData(FALSE);
}

文件拖曳功能

主界面对话框的【属性】-【Accept Files】的值设置为True。

在【属性】里的【消息】面板上有一个叫做【WM_DROPFILES】的属性单击就可以绑定一个函数。



void CMFC06FileBrowseDlg::OnDropFiles(HDROP hDropInfo)
{
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    UINT count;
    TCHAR filePath[MAX_PATH] = { 0 };

    // 判断拖动过来了多少个文件
    count = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);
    // 如果是一个文件
    if (count == 1)
    {
        // 直接赋值
        DragQueryFile(hDropInfo, 0, filePath, sizeof(filePath));
        m_szPath = filePath;
        UpdateData(FALSE);
        DragFinish(hDropInfo);

        CDialog::OnDropFiles(hDropInfo);
        return;

    }
    else
    {
        // 如果不止一个文件就可以挨个显示或者直接赋值到编辑框
        // 这种情况要么就是存在vector里,要么就是显示在ListCtrl里把多个文件列举出来。
        //m_vectorFile.clear();
        for (UINT i = 0; i < count; i++)
        {
            int pathLen = DragQueryFile(hDropInfo, i, filePath, sizeof(filePath));
            m_szPath = filePath;
            //m_vectorFile.push_back(filePath);
            //break;
        }

        UpdateData(FALSE);
        DragFinish(hDropInfo);
    }

    CDialogEx::OnDropFiles(hDropInfo);
}

猜你喜欢

转载自www.cnblogs.com/17bdw/p/10353995.html