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

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

打开文件对话框

生成一个编辑框控件绑定变量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);
}
posted @ 2019-02-06 19:49  17bdw  阅读(264)  评论(0编辑  收藏  举报