1. 程式人生 > >各種有關檔案的對話方塊的建立方法

各種有關檔案的對話方塊的建立方法

如圖所示,工程中列舉了常用對話方塊的建立方法,如儲存對話方塊,檔案選擇對話方塊,資料夾選擇對話方塊。後續有更新。連結:工程原始碼

儲存對話方塊建立:

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);
	}
}