方法一:
//CString strpath;
LPMALLOC pMalloc;
if(::SHGetMalloc(&pMalloc) == NOERROR)
{
BROWSEINFO bi;
char pszBuffer[MAX_PATH];
LPITEMIDLIST pidl;
bi.hwndOwner = GetSafeHwnd();
bi.pidlRoot = NULL;
bi.pszDisplayName = pszBuffer;
bi.lpszTitle = _T("Select a Starting Directory");
bi.ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
bi.lpfn = NULL;
bi.lParam = 0;
if((pidl = ::SHBrowseForFolder(&bi)) != NULL)
{
if (::SHGetPathFromIDList(pidl, pszBuffer))
{
strpath= pszBuffer;
SetDlgItemText( IDC_Edition1, strpath);
}
pMalloc->Free(pidl);
}
pMalloc->Release();
}
方法二:
BROWSEINFO bi;
char szBuf[MAX_PATH];
LPITEMIDLIST pidl;
LPMALLOC pMalloc;
CString szStr="";
if( ::SHGetMalloc(&pMalloc) == NOERROR )
{
bi.hwndOwner = NULL;
bi.pidlRoot = NULL;
bi.pszDisplayName = szBuf;
bi.lpszTitle = _T("选择目录");
bi.ulFlags = BIF_RETURNFSANCESTORS;
bi.lpfn = NULL;
bi.lParam = 0;
if( (pidl = ::SHBrowseForFolder(&bi)) != NULL )
{
if( ::SHGetPathFromIDList(pidl,szBuf) )
{
szStr=szBuf;
}
pMalloc->Free(pidl);
}
pMalloc->Release();
}
if(szStr=="")
{
return;
}
else
{
m_strpath=szStr;
SetDlgItemText( IDC_GamePath, m_strpath );
}
方法三: false/true 打开/保存
CFileDialog FileDlg(FALSE);
CString strFileName;
if(FileDlg.DoModal() == IDOK)
{
strFileName = FileDlg.GetPathName();
}
else
{
return 0;
}
MFC 选择和保存文件
TCHAR szFilters[] = _T("bat files(Server.bat)|Server.bat|All files(*.*)||");
// 将 TRUE 更为FALSE 就变成保存文件对话框了
CFileDialog dlg(TRUE,_T("bat"),_T("Serverbat"),OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,szFilters);
if(dlg.DoModal()== IDOK)
{
m_StrPath = dlg.GetPathName();
CString filename=dlg.GetFileName();
int index = m_StrPath.Find(filename);
m_StrPath.Delete(index, filename.GetAllocLength()+1);
this->UpdateData( FALSE );
SetDlgItemText( IDC_OldIP, GetOldServerIP( m_StrPath ) );
}