各种有关文件的对话框的创建方法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mingfengshan/article/details/51212927

如图所示,工程中列举了常用对话框的创建方法,如保存对话框,文件选择对话框,文件夹选择对话框。后续有更新。链接:工程源代码

保存对话框创建:

UpdateData(TRUE);
CString filename = "1.txt";
CFileDialog saveDlg(FALSE, NULL, filename);//第一参数为FALSE则是保存对话框,TRUE则是打开文件对话框

if (IDOK == saveDlg.DoModal())
{
m_save = saveDlg.GetPathName();
m_CSave.SetWindowTextA(m_save);
}

选择文件夹对话框,ulFlags有很多组合方法,可自由组合:

void CFileDiaDlg::OnSetFlags()
{
	UpdateData(TRUE);
	if (m_check1)
	{
		bi.ulFlags = BIF_RETURNONLYFSDIRS;
	}
	if (m_check2)
	{
		bi.ulFlags = BIF_BROWSEINCLUDEFILES;
	}
	if (m_check3)
	{
		bi.ulFlags = BIF_EDITBOX;
	}
	if (m_check1 && m_check3)
	{
		bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_EDITBOX;
	}
	if (m_check2 && m_check3)
	{
		bi.ulFlags = BIF_BROWSEINCLUDEFILES | BIF_EDITBOX;
	}
	if (m_check4)
	{
		bi.ulFlags = BIF_USENEWUI;
	}
	if (m_check1 && m_check4)
	{
		bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_USENEWUI;
	}
	if (m_check2 && m_check4)
	{
		bi.ulFlags = BIF_BROWSEINCLUDEFILES | BIF_USENEWUI;
	}
}

void CFileDiaDlg::OnBnClickedFolderButton()
{
	// TODO:  在此添加控件通知处理程序代码
	UpdateData(TRUE);
	ZeroMemory(&bi, sizeof(BROWSEINFO));
	bi.hwndOwner = m_hWnd;
	bi.lpszTitle = _T("请选择一个文件夹:");
	OnSetFlags();
	LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
	BOOL bRet = FALSE;
	TCHAR szFolder[MAX_PATH * 2];
	szFolder[0] = _T('\0');
	if (pidl)
	{
		if (SHGetPathFromIDList(pidl, szFolder))
		{
			bRet = TRUE;
		}
		IMalloc *pMalloc = NULL;
		if (SUCCEEDED(SHGetMalloc(&pMalloc)) && pMalloc)
		{
			pMalloc->Free(pidl);
			pMalloc->Release();
		}
		m_folder = szFolder;
		m_CFolder.SetWindowTextA(m_folder);
	}
}

文件选择对话框,dw也有很多组合方法,可按需选择组合:

void CFileDiaDlg::OnSetDw()
{
	if (m_check5)
	{
		dw = OFN_ALLOWMULTISELECT; //可以选择多个文件
	}
	if (m_check6)
	{
		dw = OFN_CREATEPROMPT; //如果输入的文件名不存在,则返回询问是否创建消息框
	}
	if (m_check7)
	{
		dw = OFN_FILEMUSTEXIST; //只能输入已存在的文件名
	}
	if (m_check8)
	{
		dw = OFN_FORCESHOWHIDDEN; //可以显示隐藏的文件
	}
}

void CFileDiaDlg::OnBnClickedFileButton()
{
	// TODO:  在此添加控件通知处理程序代码
	UpdateData(TRUE);
	OnSetDw();
	CFileDialog filedlg(TRUE, NULL, NULL, dw);
	if (IDOK == filedlg.DoModal())
	{
		m_file = filedlg.GetPathName();
		m_CFile.SetWindowTextA(m_file);
	}
}




扫描二维码关注公众号,回复: 4109400 查看本文章

猜你喜欢

转载自blog.csdn.net/mingfengshan/article/details/51212927