关于CFiledialogue的一个问题
CFileDialog m_filedlg(TRUE);
if(m_filedlg.DoModal()==IDOK)
{CString str = m_filedlg.GetPathName();
this->GetDlgItem(IDC_EDIT1)->SetWindowText(str);
}
用这段程序可以制作一个打开文件对话框,但是只能选择一个确定的文件及路径,而不能选择一个确定的文件夹.在输出的时候,需要选定一个文件夹该怎么办呢?
别人回复:CFileDialog中有一个成员变量,没装MSDN具体名字忘了,然后该变量又有一些成员变量,其中有一个是初始的路径,仔细看看MSDN.
由于是初学者,我仔细看了msdn可还是不知道是哪个变量,该怎么做,请大侠指教!
问题点数:10、回复次数:11Top
1 楼freefalcon(心宇—消失中...)回复于 2004-05-03 20:01:00 得分 0
选择文件夹用SHBrowseForFolder
你可以在网上搜一下这个API
下面是一段代码,截取的,不完整
char lpszFilePath[MAX_PATH];
BROWSEINFO bi;
bi.hwndOwner = this->GetSafeHwnd();
bi.pidlRoot = NULL;
bi.pszDisplayName = lpszFilePath;
bi.lpszTitle = _T("Select Path:");
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.lParam = NULL;
LPITEMIDLIST lpil = SHBrowseForFolder(&bi);
if(lpil != NULL)
{
SHGetPathFromIDList(lpil, lpszFilePath);
m_strFilePath = CString(lpszFilePath);
}Top
2 楼cngdzhang()回复于 2004-05-03 20:03:01 得分 10
给你一段代码,是用API的,
可以显示出象Winamp中的选择文件夹的对话框
(当年我为了研究出这个找了3天的书:( )
BROWSEINFO lpbi;
lpbi.hwndOwner=m_hWnd; //对话框的父窗口
lpbi.pidlRoot=NULL;
char name[MAX_PATH]="fsdlhlfksd";
lpbi.pszDisplayName=name; //显示的提示信息
lpbi.lpszTitle=name; //显示的对话框标题
lpbi.ulFlags=BIF_RETURNONLYFSDIRS; //返回的是文件夹
lpbi.lpfn=NULL;
lpbi.lParam=NULL;
lpbi.iImage=0;
ITEMIDLIST *dl;
dl=::SHBrowseForFolder(&lpbi); //显示选择文件夹的对话框
::SHGetPathFromIDList(dl, name); //取得路径
MessageBox(name); //用消息框显示
if(!dl) ::free(dl); //释放内存
Top
3 楼melanie77(琦琦)回复于 2004-05-03 20:16:27 得分 0
谢谢楼上的。
但是,以上代码在运行后,能够跳出我所需要的对话框。但是无法正确显示路径。
请各位再帮帮忙了!Top
4 楼cngdzhang()回复于 2004-05-03 20:21:15 得分 0
我的也不行吗?
桌面的路径是DeskTop哦
Top
5 楼freefalcon(心宇—消失中...)回复于 2004-05-03 20:22:27 得分 0
不会吧
char lpszFilePath[MAX_PATH];
BROWSEINFO bi;
bi.hwndOwner = this->GetSafeHwnd();
bi.pidlRoot = NULL;
bi.pszDisplayName = lpszFilePath;
bi.lpszTitle = _T("Select Path:");
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.lParam = NULL;
LPITEMIDLIST lpil = SHBrowseForFolder(&bi);
if(lpil != NULL)
{
SHGetPathFromIDList(lpil, lpszFilePath);
CString m_strFilePath;
m_strFilePath = CString(lpszFilePath);
MessageBox(m_strFilePath);
}Top
6 楼melanie77(琦琦)回复于 2004-05-03 20:23:25 得分 0
哦,现在可以了cngdzhang ,只是还要将路径显示在旁边的editbox中。
非常感谢你呀!Top
7 楼melanie77(琦琦)回复于 2004-05-03 20:26:13 得分 0
可以再请教ma ?
如何将路径显示在旁边的editbox中?Top
8 楼cngdzhang()回复于 2004-05-03 20:31:39 得分 0
首先
有一个成员变量和这个editbox关连
如果是CString 类型的m_path
那么用
m_path=name;
UpdateData(FALSE);
如果是CEditCtrl类型的m_path
用
m_path->SetWindowText(name);
Top
9 楼cngdzhang()回复于 2004-05-03 20:31:58 得分 0
m_path.SetWindowText(name);Top
10 楼melanie77(琦琦)回复于 2004-05-03 21:06:25 得分 0
我的相关变量是m_output,是control类型的
在先前的程序后加了以下代码:
m_output.SetWindowText(name);
出现以下错误:
cannot open Debug/黄河.exe for writing
Error executing link.exe.Top
11 楼melanie77(琦琦)回复于 2004-05-03 21:25:00 得分 0
哦!!这下终于对了:)谢谢楼主!Top




