打开文件对话框和文件拖曳功能
打开文件对话框和文件拖曳功能
打开文件对话框
生成一个编辑框控件绑定变量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);
}