CFileDialog怎么实现目录的选择? 想实现目录的选择。就是选择的目录显示在编辑框中。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //如下实现CString strTmpPath;int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData){ TCHAR szDir[MAX_PATH]; switch(uMsg){ case BFFM_INITIALIZED: if (lpData){ strcpy(szDir, strTmpPath.GetBuffer(strTmpPath.GetLength())); SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)szDir); } break; case BFFM_SELCHANGED: { if (SHGetPathFromIDList((LPITEMIDLIST) lParam ,szDir)){ SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir); } break; } default: break; } return 0;}BOOL GetFolder(CString* strSelectedFolder, const char* lpszTitle, const HWND hwndOwner, const char* strRootFolder, const char* strStartFolder){ char pszDisplayName[MAX_PATH]; LPITEMIDLIST lpID; BROWSEINFOA bi; bi.hwndOwner = hwndOwner; if (strRootFolder == NULL){ bi.pidlRoot = NULL; }else{ LPITEMIDLIST pIdl = NULL; IShellFolder* pDesktopFolder; char szPath[MAX_PATH]; OLECHAR olePath[MAX_PATH]; ULONG chEaten; ULONG dwAttributes; strcpy(szPath, (LPCTSTR)strRootFolder); if (SUCCEEDED(SHGetDesktopFolder(&pDesktopFolder))) { MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szPath, -1, olePath, MAX_PATH); pDesktopFolder->ParseDisplayName(NULL, NULL, olePath, &chEaten, &pIdl, &dwAttributes); pDesktopFolder->Release(); } bi.pidlRoot = pIdl; } bi.pszDisplayName = pszDisplayName; bi.lpszTitle = lpszTitle; bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT; bi.lpfn = BrowseCallbackProc; if (strStartFolder == NULL){ bi.lParam = FALSE; }else{ strTmpPath.Format("%s", strStartFolder); bi.lParam = TRUE; } bi.iImage = NULL; lpID = SHBrowseForFolderA(&bi); if (lpID != NULL){ BOOL b = SHGetPathFromIDList(lpID, pszDisplayName); if (b == TRUE){ strSelectedFolder->Format("%s",pszDisplayName); return TRUE; } }else{ strSelectedFolder->Empty(); } return FALSE;}//CGetFolderDlg为对话框程序主窗口类void CGetFolderDlg::OnGetfolder() { CString strFolderPath; if (GetFolder(&strFolderPath, "Sample of getting folder.", this->m_hWnd, NULL, NULL)) { if (!strFolderPath.IsEmpty()) { //strFolderPath便是 } }} CFileDialog中有一个OPENFILENAME类型的成员m_ofn设置m_ofn各个域的值可以对CFileDialog的行为作出各种各样的修改比如:设置缺省目录:CFileDialog openfile(true,"dat","d:\pcm\pcm1.dat");openfile.m_ofn.lpstrInitialDir = "d;\pcm\";openfile.DoModal(); vc2010,winhttp读取网页,显示乱码,如何解决 vs2010下面怎么创建 右键菜单 请问QQ的主界面是怎么制作的? 学校的作业有些技术问题,上来问问 在线等待:vector的循环调用问题!急等 熟悉WTL的朋友请帮忙 我使用VC连接ORACLE8i数据库,但是速度相当慢;而连接SQLSERVER就相当快,是什么原因,请赐教! CEDIT设置“改变”事件后,无法正常输入小数,为什么? 求购纸牌类游戏的设计思路! pretranslatemessage截不到自定义消息? CListCtrl如何得到一列的列名? 如何实现类似QQ的那种弹出缩进的效果的?
CString strTmpPath;
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
TCHAR szDir[MAX_PATH];
switch(uMsg){
case BFFM_INITIALIZED:
if (lpData){
strcpy(szDir, strTmpPath.GetBuffer(strTmpPath.GetLength()));
SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)szDir);
}
break;
case BFFM_SELCHANGED: {
if (SHGetPathFromIDList((LPITEMIDLIST) lParam ,szDir)){
SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir);
}
break;
}
default:
break;
}
return 0;
}BOOL GetFolder(CString* strSelectedFolder,
const char* lpszTitle,
const HWND hwndOwner,
const char* strRootFolder,
const char* strStartFolder)
{
char pszDisplayName[MAX_PATH];
LPITEMIDLIST lpID;
BROWSEINFOA bi;
bi.hwndOwner = hwndOwner;
if (strRootFolder == NULL){
bi.pidlRoot = NULL;
}else{
LPITEMIDLIST pIdl = NULL;
IShellFolder* pDesktopFolder;
char szPath[MAX_PATH];
OLECHAR olePath[MAX_PATH];
ULONG chEaten;
ULONG dwAttributes; strcpy(szPath, (LPCTSTR)strRootFolder);
if (SUCCEEDED(SHGetDesktopFolder(&pDesktopFolder)))
{
MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, szPath, -1, olePath, MAX_PATH);
pDesktopFolder->ParseDisplayName(NULL, NULL, olePath, &chEaten, &pIdl, &dwAttributes);
pDesktopFolder->Release();
}
bi.pidlRoot = pIdl;
}
bi.pszDisplayName = pszDisplayName;
bi.lpszTitle = lpszTitle;
bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
bi.lpfn = BrowseCallbackProc;
if (strStartFolder == NULL){
bi.lParam = FALSE;
}else{
strTmpPath.Format("%s", strStartFolder);
bi.lParam = TRUE;
}
bi.iImage = NULL;
lpID = SHBrowseForFolderA(&bi);
if (lpID != NULL){
BOOL b = SHGetPathFromIDList(lpID, pszDisplayName);
if (b == TRUE){
strSelectedFolder->Format("%s",pszDisplayName);
return TRUE;
}
}else{
strSelectedFolder->Empty();
}
return FALSE;
}//CGetFolderDlg为对话框程序主窗口类
void CGetFolderDlg::OnGetfolder()
{
CString strFolderPath;
if (GetFolder(&strFolderPath, "Sample of getting folder.", this->m_hWnd, NULL, NULL))
{
if (!strFolderPath.IsEmpty())
{
//strFolderPath便是
}
}
}
设置m_ofn各个域的值可以对CFileDialog的行为作出各种各样的修改
比如:设置缺省目录:CFileDialog openfile(true,"dat","d:\pcm\pcm1.dat");
openfile.m_ofn.lpstrInitialDir = "d;\pcm\";
openfile.DoModal();