最近用MFC做PC端的软件,需要选择文件,现在将我用到的部分代码贴上,以供参考:
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;//文件数量
//输入文件
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就是文件路径
//做点什么事情,比如添加到列表框
}
}
//释放空间
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;//这个是输出缓冲区
bi.lpszTitle = _T("选择输出文件夹:");//标题
bi.ulFlags = BIF_NEWDIALOGSTYLE;//使用新的界面,在win7中效果较好//BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
pidl = SHBrowseForFolder(&bi);//弹出对话框
if(pidl == NULL)//点了取消,或者选择了无效的文件夹则返回NULL
return;
if(SHGetPathFromIDList(pidl, szDir))
szDir = szDir;//szDir就是要获取的文件夹
//得到之后做点什么
}
最后贴上原文地址:http://blog.csdn.net/qq446252221/article/details/17379995