CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

关于CFiledialogue的一个问题

楼主melanie77(琦琦)2004-05-03 19:52:33 在 C/C++ / C++ 语言 提问

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

相关问题

关键词

  • bi
  • 文件夹
  • 代码
  • msdn
  • lpszfilepath
  • lpil
  • lpbi
  • 路径
  • 变量
  • 对话框

得分解答快速导航

  • 帖主:melanie77
  • cngdzhang

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo