分类: C/C++
2008-08-01 17:08:10
// 首先创建一个 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。如图所示:
#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; // 切记使用完后释放资源详细代码请参考本文例子代码。