cfiledialog对话框大小_关于 CFileDialog 对话框多选功能的一个问题
如果多选时选中的文件过多,那么后面选中的文件将无效,也就是说即使也白选,点击“确定”后没有任何操作 。本文将提供解决此问题的办法,并说明问题的来由。
一般我们都是象下面这样来设置具备多选能力的 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 对话框多选功能的一个问题相关推荐
- cfiledialog对话框大小_文件选择对话框:CFileDialog
程序如下: CString FilePathName; //文件名参数定义 CFileDialog Dlg(TRUE,NULL,NULL, OFN_HIDEREADONLY | OFN_OVER ...
- cfiledialog对话框大小_利用MFC的CFileDialog生成Windows2000文件对话框 (转)
利用MFC的CFileDialog生成Windows2000文件对话框 (转)[@more@] 利用MFC的CFileDialog生成windows2000文件对话框 周鸣扬 自Windows2000 ...
- cfiledialog对话框大小_一个定制CFileDialog对话框的实例
很多程序员都喜欢让自己的代码运行效果与众不同.Windows系统的应用程序打开某个文件一般使用的都是默认的CFileDialog.但是这个默认的CFileDialog往往满足不了用户的要求.我就碰到一 ...
- 关于 CFileDialog 对话框多选功能的一个问题
From: http://www.vckbase.com/document/viewdoc/?id=1544 最近有位读者来信指出:<在线杂志>第26期中有一篇文章:"再谈 CF ...
- python对话框大小_Python 版 AR 对话框
周末了,用 Python 代码给大家带来一个好玩的视频特效:Python 版 AR 对话框https://www.zhihu.com/video/1110617264784699392 摄像头拍摄的视 ...
- c++用一级运算比较大小_以SM3算法为例,构建一个软硬协作算法加速器:设计面向SM3优化的运算结构...
本文书接上文,来讨论如何具体地针对 SM3 算法的特点,优化计算架构,如通过 CSA 加法器来优化加法关键路径等方法,提升系统频率,提高系统吞吐性能. SM3 中的运算 在分析关键关键路径之前,首先分 ...
- java鼠标左键按下后拖动实现多选_鼠标拖拽多选功能
鼠标拖拽多选功能 *{ box-sizing:border-box; } ul{ width:500px; height:auto; margin:0; padding:20px; font-size ...
- cfiledialog对话框大小_XFileDialog-自定义的CFileDialog
XFileDialog-自定义的CFileDialog 简介 被首次引入新的共同文件对话框时,我立刻喜欢他们期待的方式.但我也注意到,驱动器和目录下拉列表显得有点尴尬,特别是如果你想翻转两个不同的驱动 ...
- 秀米的对话框格子可以变大吗_漫画的对话框大小跟字数怎么才能在分镜的格子里正确配合?...
对白文字: 对白文字的讲究也很多,但这和排版行业关系比较大,在过去没有电脑绘制时期,这项工作一般是由责任编辑或美工编辑来负责完成,不过CG制作的今天,这部分工作也需要漫画家自己来执行. 首先,对白文字 ...
最新文章
- 正则表达式限定长度_自己写一个通用的邮箱正则表达式
- 怎么证明会python_如何在python中验证SSL证书?
- 数据库之间数据转换最快方法
- 插件式架构设计实践一:插件式系统架构设计简介
- 视觉SLAM——ORB特征
- 王欣的“灵鸽”到底行不行?
- Spring Cloud Alibaba | Dubbo 与 Spring Cloud 完美结合
- Java基础之泛型的使用
- 关于XML字符串和XML Document之间的转换
- 存储ic载板_【行业亮点】看好载板供不应求趋势,深南/兴森/越亚积极布局
- 金山安全报告:十大病毒危害排行出炉
- linux 更新系统命令,Linux系统自动更新时间命令的详细说明
- 解决Unity TextMeshPro 不能显示中文问题
- [转]经验之谈:成为Debian Maintainer前要做的事
- 实现isPrime()函数,参数是整数,如果整数是质数, 返回True,否则返回False
- 显示器分辨率的英文(XGA、SXGA、UXGA、WSXGA等等来表示)
- 运放微分、积分电路的本质以及电容的阴谋
- metapath2vec 异构网络表示学习
- 【算法】时间和空间复杂度
- TensorFlow2.0保存模型