最近用MFC做PC端的軟件僚饭,需要選擇文件沽瘦,現(xiàn)在將我用到的部分代碼貼上啦租,以供參考:
int C字幕處理工具Dlg::SetupCombo(CComboBox *combo, int type)
{
? ? ? ? HRESULT hResult;
? ? ? ? static char BASED_CODE szFilter[] =
? ? ? ? "Binary or ELF Files (*.MP4)|*.MP4" ?
? ? ? ? "|All Files (*.*)|*.*||";
? ? ? ? int nIndex = 0;
? ? ? ? char str_path[MAX_FILENAME_LEN];
? ? ? ? LPTSTR lpEnd;
? ? ? ? /* Try to use default path */
? ? ? ? combo->GetWindowText(str_path, MAX_FILENAME_LEN);
? ? ? ? lpEnd = StrRChr(str_path, NULL, _T('\\'));?
? ? ? ? if (lpEnd) {
? ? ? ? ? ? ? ? *lpEnd = _T('\0');
? ? ? ? }
? ? ? ? if (type == OPEN_FILE)
? ? ? ? {
? ? ? ? ? ? ? ? CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_ENABLESIZING, szFilter);
? ? ? ? ? ? ? ? dlg.m_ofn.lpstrInitialDir = str_path;
? ? ? ? ? ? ? ? hResult = (int)dlg.DoModal();
? ? ? ? ? ? ? ? if (hResult != IDOK) {
? ? ? ? ? ? ? ? ? ? ? ? return -1;
? ? ? ? ? ? ? ? }
? ? ? ? combo->InsertString(0, dlg.GetPathName().GetString());
? ? ? ? combo->SetCurSel(0);
? ? ? ? }
? ? ? ? else
? ? ? ? {
? ? ? ? ? ? ? ? CFileDialog dlg(FALSE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT, szFilter);
? ? ? ? ? ? ? ? dlg.m_ofn.lpstrInitialDir = str_path;
? ? ? ? ? ? ? ? hResult = (int)dlg.DoModal();
? ? ? ? ? ? ? ? if (hResult != IDOK) {
? ? ? ? ? ? ? ? ? ? ? ? return -1;
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? CString str = dlg.GetPathName().GetString();
? ? ? ? ? ? ? ? combo->InsertString(0, str);
? ? ? ? ? ? ? ? combo->SetCurSel(0);
? ? ? ? }
return 0;
}
void C字幕處理工具Dlg::OnBnClickedMfcbtnChoosefile()
{
? ? ? ? // TODO: 在此添加控件通知處理程序代碼
? ? ? ? SetupCombo(&m_combo_DVR, OPEN_FILE);
}
void C字幕處理工具Dlg::OnBnClickedMfcbtnSave()
{
? ? ? ? // TODO: 在此添加控件通知處理程序代碼
? ? ? ? SetupCombo(&m_combo_SAVE, SAVE_FILE);
}
上面這份代碼可以選擇和保存文件。
之后我又從CSDN上找了一份選擇文件和文件夾的代碼讥蔽,這里貼出來給大家參考:
1涣易、批量選擇文件
// 批量添加文件列表
voidAddFile()
{
? ? ? ? CString?????szFileName;
? ? ? ? CString?????szCount;
? ? ? ? POSITION????pos;
? ? ? ? int i;
? ? ? ? int nCount = 0;//文件數(shù)量
? ? ? ? //輸入文件
? ? ? ? CFileDialog?InFile(?TRUE,NULL,NULL,OFN_FILEMUSTEXIST|OFN_ALLOWMULTISELECT,_T("某種格式|*.fmt|所有文件(*.*)|*.*||")?);
? ? ? ? InFile.m_ofn.nMaxFile??=?10000;//文件上限
? ? ? ? InFile.m_ofn.lpstrFile?=?(LPWSTR)malloc(InFile.m_ofn.nMaxFile*sizeof(TCHAR));
? ? ? ? memset(InFile.m_ofn.lpstrFile,0,InFile.m_ofn.nMaxFile);
? ? ? ? //按了OK按鈕,開始獲取文件列表
? ? ? ? if(InFile.DoModal()?==?IDOK)
? ? ? ? {
? ? ? ? ? ? ? ? pos=InFile.GetStartPosition();
? ? ? ? ? ? ? ? while(pos)
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? ? ? szFileName=InFile.GetNextPathName(pos);
? ? ? ? ? ? ? ? ? ? ? ? //這里szFileName就是文件路徑
? ? ? ? ? ? ? ? ? ? ? ? //做點(diǎn)什么事情冶伞,比如添加到列表框
? ? ? ? ? ? ? ? }
? ? ? ? }
? ? ? ? //釋放空間
? ? ? ? free(InFile.m_ofn.lpstrFile);
}
2都毒、選擇文件夾
voidSelectPath()
{
? ? ? ? //選擇輸出路徑
? ? ? ? TCHARszDir[MAX_PATH];
? ? ? ? BROWSEINFO?bi;
? ? ? ? ITEMIDLIST?*pidl;
? ? ? ? bi.hwndOwner?=this->m_hWnd;
? ? ? ? bi.pidlRoot?=?NULL;
? ? ? ? bi.pszDisplayName?=?szDir;//這個(gè)是輸出緩沖區(qū)
? ? ? ? bi.lpszTitle?=?_T("選擇輸出文件夾:");//標(biāo)題
? ? ? ? bi.ulFlags?=?BIF_NEWDIALOGSTYLE;//使用新的界面,在win7中效果較好//BIF_RETURNONLYFSDIRS;
? ? ? ? bi.lpfn?=?NULL;
? ? ? ? bi.lParam?=?0;
? ? ? ? bi.iImage?=?0;
? ? ? ? pidl?=?SHBrowseForFolder(&bi);//彈出對(duì)話框
? ? ? ? if(pidl?==?NULL)//點(diǎn)了取消,或者選擇了無效的文件夾則返回NULL
? ? ? ? return;
? ? ? ? if(SHGetPathFromIDList(pidl,?szDir))
? ? ? ? szDir?=?szDir;//szDir就是要獲取的文件夾
? ? ? ? //得到之后做點(diǎn)什么
}
最后貼上原文地址:http://blog.csdn.net/qq446252221/article/details/17379995