关于 CFileDialog 对话框多选功能的一个问题,关于 CFileDialog 对话框多选功能的一个问题
【 tulaoshi.com - C语言心得技巧 】
关于 CFileDialog 对话框多选功能的一个问题
作者:Northtibet
下载源代码
最近有位读者来信指出:《在线杂志》第26期中有一篇文章:“再谈 CFileDialog 对话框的定制”,其例子程序有一个bug。如果多选时选中的文件过多,那么后面选中的文件将无效,也就是说即使也白选,点击“确定”后没有任何操作。本文将提供解决此问题的办法,并说明问题的来由。
一般我们都是象下面这样来设置具备多选能力的 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("%sn",pathName);13} 14 }15 else16 TRACE(“IDCANCLEn”);在大多数情况下,这段代码都能正常运行,但如果你选中的文件过多,那么后面选中的文件将不会被影响,选中无反应,点击“确定”也无操作。这是为什么呢?在上述代码段的第五行添加如下语句:
TRACE("nMaxFile :%dn",mFileDlg.m_ofn.nMaxFile);编译并运行上述代码(具体细节参见本文例子程序),并用 TraceWin 跟踪 TRACE 输出,你会发现 nMaxFile 的输出是 260。如图所示:
#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; // 切记使用完后释放资源详细代码请参考本文例子代码。
来源:http://www.tulaoshi.com/n/20160129/1484073.html
看过《关于 CFileDialog 对话框多选功能的一个问题》的人还看了以下文章 更多>>