各種有關檔案的對話方塊的建立方法
阿新 • • 發佈:2018-11-17
如圖所示,工程中列舉了常用對話方塊的建立方法,如儲存對話方塊,檔案選擇對話方塊,資料夾選擇對話方塊。後續有更新。連結:工程原始碼
儲存對話方塊建立:
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); } }