首页 Soft PlugIn RAN乱 Dev开发 Info资料 English WAP 留言 登陆 注册
-
Posted by Yippee | 评论(0) | 引用(0) | 阅读1904次
扩充文件选择对话框的多选能力

    扩充文件选择对话框的多选能力
 我们都会使用VC的CfileFialog类进行文件选择操作,使用非常简单,通常代码如下:
 CFileDialog mFileDlg(TRUE, NULL,NULL, OFN_ALLOWMULTISELECT,"All Files (*.*)&line;*.*&line; &line;", AfxGetMainWnd()); //初始化一个CFIleDialog类,设置多选标志
CString pathName;
 If(mFileDlg.DoModal ()==IDOK)
 {
 POSITION mPos=mFileDlg.GetStartPosition();
  while(mPos!=NULL)
  {
   pathName=mFileDlg.GetNextPathName(mPos);
   TRACE("%s\n",pathName);
  }
  }
 else
  TRACE("IDCANCLE\n");
 以上是一段显示文件选择对话框http://www.shengfang.org进行多选,然后显示每个文件名的代码,我调试程序的时候似乎很正常,可以进行多选,不会出错,但是一次我不经意的进入WIN98目录,用鼠标选择了大量文件后,调试信息中显示返回是IDCANCLE,可是我明明是选择了"打开"按钮的,经过反复调试,终于解决了这个问题。
 原来,CfileDialog类有一个成员变量:m_ofn,定义为一个OPENFILENAME结构,在这个接口里,可以设置各种文件对话框的初始化信息,如果我们进行多选,那么需要重新设置其中的两个变量:
 LPTSTR        lpstrFile;   DWORD         nMaxFile;
 这两个变量就是定义为存放返回的文件名的字符串及其大小,如果我们在前面的代码中增加一行,TRACE("nMaxFile :%d\n",mFileDlg.m_ofn.nMaxFile);查看WINDOWS默认大小,就会发现原来只能存发260个字符,所以我们必须自己重新定义字符串大小。代码如下:
 CFileDialog mFileDlg(TRUE, NULL,NULL, OFN_ALLOWMULTISELECT,"All Files (*.*)&line;*.*&line; &line;", AfxGetMainWnd());

 mFileDlg.m_ofn.lpstrFile=new char[2000]; //重新定义存放选择文件名称的字符串
 memset(mFileDlg.m_ofn.lpstrFile,0,2000); //进行初始化
mFileDlg.m_ofn.nMaxFile =2000;   //重新定义字符串大小
//2000这个数值可以根据需要进行调整,以便更好符合程序实际应用情况。
 …..
 delete mFileDlg.m_ofn.lpstrFile; //最后手工释放资源
 由此就解决了CfileDialog对话框类默认存放文件名过小的问题,同时也提醒我们任何一个程序都需要进行各种模拟测试,不要简单测试正常就http://www.shengfang.org通过,否则,因为不同用户有不同的环境,程序发行后就会很容易产生各种问题。


字体:

Permanant URI永久地址 http://www.shengfang.org/blog/p/CfileFialogext.php
Trackback URI引用地址 http://www.shengfang.org/blog/tb.php?tb_id=1112260600

2005年3月31日17:16星期四  [Dev开发] 追踪此文的RSS
提示:
此文还没有评论。

称呼:    登陆   注册
   不注册,但记住我的信息
邮件:
(非必须)
评论: [UBB代码帮助]
粗体 斜体 下划线 链接 水平线 引用



验证码: 请输入你看见的数字
关闭UBB      提交时自动将内容复制到剪贴板

公告
Fire and Motion!

统计信息
[Yippee]||[统计]||日志:1790
在线: 9||用户: 2563 [列表]
今日:696||到访:2682335
Rss:841979||评论:1585

最新日志

最新评论

友情链接

日历

最新引用

搜索

归档

杂项
Get RSS Feed (Version 2.0)
Get Atom Feed (Version 0.3)
编码:  UTF-8