1. 程式人生 > >打開文件對話框和文件拖曳功能

打開文件對話框和文件拖曳功能

判斷 acc 一個 cep all date 變量 char ||

打開文件對話框和文件拖曳功能

打開文件對話框

生成一個編輯框控件綁定變量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);
}

打開文件對話框和文件拖曳功能