如果多选时选中的文件过多,那么后面选中的文件将无效,也就是说即使也白选,点击“确定”后没有任何操作 。本文将提供解决此问题的办法,并说明问题的来由。

一般我们都是象下面这样来设置具备多选能力的 CFileDialog:

// 首先创建一个 CFIleDialog 类实例,并设置多选标志

1 CFileDialog mFileDlg(TRUE, NULL,NULL,

2 OFN_ALLOWMULTISELECT,

3 _T("Text Files (*.txt)|*.txt|All Files (*.*)|*.*||"),

4 AfxGetMainWnd());

5 CString pathName;

6 If(mFileDlg.DoModal ()==IDOK)

7 {

8 POSITION mPos=mFileDlg.GetStartPosition();

9 while(mPos!=NULL)

10 {

11 pathName=mFileDlg.GetNextPathName(mPos);

12 TRACE("%s/n",pathName);

13}

14 }

15 else

16 TRACE(“IDCANCLE/n”);

在大多数情况下,这段代码都能正常运行,但如果你选中的文件过多,那么后面选中的文件将不会被影响,选中无反应,点击“确定”也无操作。这是为什么呢?在上述代码段的第五行添加如下语句:

TRACE("nMaxFile :%d/n",mFileDlg.m_ofn.nMaxFile);

编译并运行上述代码(具体细节参见本文例子程序),并用 TraceWin 跟踪 TRACE 输出,你会发现 nMaxFile 的输出是 260。如图所示:

问题就出在这里,nMaxFile 是 OPENFILENAME 结构的成员之一,MSDN 对之是这样解释的:

nMaxFile:说明 lpstrFile 缓冲指针的大小,以 TCHARs 为单位。对于 ANSI 版本,它指的是字节数。对于 Unicode 版本,它指的是字符数,该缓冲必须足够大才能存储文件的路径字符串,包括结尾空字符。如果 该缓存太小以至于无法包含文件信息,那么 GetOpenFileName 和 GetSaveFileName 函数将返回 FALSE。该缓冲至少要求容纳 256 个字符。

现在明白了吧,多选时,由于文件路径和名称的长度超过了限制,造成程序出现上述问题。解决办法是重新设置 nMaxFile 大小。

#define NAMEBUF 1024

...

mFileDlg.m_ofn.lpstrFile=new TCHAR[NAMEBUF]; // 重新定义 lpstrFile 缓冲大小

memset(mFileDlg.m_ofn.lpstrFile,0,NAMEBUF); // 初始化定义的缓冲

mFileDlg.m_ofn.nMaxFile = NAMEBUF; // 重定义 nMaxFile

...

delete [] mFileDlg.m_ofn.lpstrFile; // 切记使用完后释放资源

cfiledialog对话框大小_关于 CFileDialog 对话框多选功能的一个问题相关推荐

  1. cfiledialog对话框大小_文件选择对话框:CFileDialog

    程序如下: CString   FilePathName; //文件名参数定义 CFileDialog  Dlg(TRUE,NULL,NULL, OFN_HIDEREADONLY | OFN_OVER ...

  2. cfiledialog对话框大小_利用MFC的CFileDialog生成Windows2000文件对话框 (转)

    利用MFC的CFileDialog生成Windows2000文件对话框 (转)[@more@] 利用MFC的CFileDialog生成windows2000文件对话框 周鸣扬 自Windows2000 ...

  3. cfiledialog对话框大小_一个定制CFileDialog对话框的实例

    很多程序员都喜欢让自己的代码运行效果与众不同.Windows系统的应用程序打开某个文件一般使用的都是默认的CFileDialog.但是这个默认的CFileDialog往往满足不了用户的要求.我就碰到一 ...

  4. 关于 CFileDialog 对话框多选功能的一个问题

    From: http://www.vckbase.com/document/viewdoc/?id=1544 最近有位读者来信指出:<在线杂志>第26期中有一篇文章:"再谈 CF ...

  5. python对话框大小_Python 版 AR 对话框

    周末了,用 Python 代码给大家带来一个好玩的视频特效:Python 版 AR 对话框https://www.zhihu.com/video/1110617264784699392 摄像头拍摄的视 ...

  6. c++用一级运算比较大小_以SM3算法为例,构建一个软硬协作算法加速器:设计面向SM3优化的运算结构...

    本文书接上文,来讨论如何具体地针对 SM3 算法的特点,优化计算架构,如通过 CSA 加法器来优化加法关键路径等方法,提升系统频率,提高系统吞吐性能. SM3 中的运算 在分析关键关键路径之前,首先分 ...

  7. java鼠标左键按下后拖动实现多选_鼠标拖拽多选功能

    鼠标拖拽多选功能 *{ box-sizing:border-box; } ul{ width:500px; height:auto; margin:0; padding:20px; font-size ...

  8. cfiledialog对话框大小_XFileDialog-自定义的CFileDialog

    XFileDialog-自定义的CFileDialog 简介 被首次引入新的共同文件对话框时,我立刻喜欢他们期待的方式.但我也注意到,驱动器和目录下拉列表显得有点尴尬,特别是如果你想翻转两个不同的驱动 ...

  9. 秀米的对话框格子可以变大吗_漫画的对话框大小跟字数怎么才能在分镜的格子里正确配合?...

    对白文字: 对白文字的讲究也很多,但这和排版行业关系比较大,在过去没有电脑绘制时期,这项工作一般是由责任编辑或美工编辑来负责完成,不过CG制作的今天,这部分工作也需要漫画家自己来执行. 首先,对白文字 ...

最新文章

  1. 正则表达式限定长度_自己写一个通用的邮箱正则表达式
  2. 怎么证明会python_如何在python中验证SSL证书?
  3. 数据库之间数据转换最快方法
  4. 插件式架构设计实践一:插件式系统架构设计简介
  5. 视觉SLAM——ORB特征
  6. 王欣的“灵鸽”到底行不行?
  7. Spring Cloud Alibaba | Dubbo 与 Spring Cloud 完美结合
  8. Java基础之泛型的使用
  9. 关于XML字符串和XML Document之间的转换
  10. 存储ic载板_【行业亮点】看好载板供不应求趋势,深南/兴森/越亚积极布局
  11. 金山安全报告:十大病毒危害排行出炉
  12. linux 更新系统命令,Linux系统自动更新时间命令的详细说明
  13. 解决Unity TextMeshPro 不能显示中文问题
  14. [转]经验之谈:成为Debian Maintainer前要做的事
  15. 实现isPrime()函数,参数是整数,如果整数是质数, 返回True,否则返回False
  16. 显示器分辨率的英文(XGA、SXGA、UXGA、WSXGA等等来表示)
  17. 运放微分、积分电路的本质以及电容的阴谋
  18. metapath2vec 异构网络表示学习
  19. 【算法】时间和空间复杂度
  20. TensorFlow2.0保存模型

热门文章

  1. VBA随学随用系列:进口关税电子发票管理工具 - 总纲
  2. Android按键音的默认值修改流程
  3. 批量检测商品是否下架,批量查询商品信息接口
  4. Java网络编程套接字
  5. AD将元器件由正面,放置到反面/元器件由反面放到正面
  6. ESB总线的核心架构
  7. 二十二. 智能驾驶之使用无损滤波器(UKF)跟踪感知系统感知的障碍物
  8. 解决jqweui中slider 按住移动时鼠标超出松开还会继续移动问题。
  9. spring 多数据源 JTA 事务管理
  10. 《炬丰科技-半导体工艺》半导体材料薄膜的生产工艺