 |
操作系统: Windows95.98
编程工具: VC
在使用CFileDialog类选择多个文件,发现可选择的个数有限。据资料说,要将m_ofn.lpstrFile替换成自己的缓冲区指针。(Tony)
|
| |
|
 |
选择多个文件,最重要的是加上OFN_ALLOWMULTISELECT标志。当用户选择多个文件,CFileDialog会把选择后的文件名拷贝到一个缓冲区,默认这个缓冲区有200多个字符,这对于很多情况来说太小了。你可以将m_ofn.lpstrFile替换成自己的缓冲区指针:
char sBuffer[6000];
sBuffer[0] = 0;
CFileDialog dlg(TRUE, NULL, NULL,
OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT |
OFN_ALLOWMULTISELECT,
"C++ source|*.cpp|All files|*.*||");
dlg.m_ofn.lpstrFile = sBuffer;
dlg.m_ofn.nMaxFile = 6000;
如果缓冲区不够大,CommDlgExtendedError()函数的返回值为FNERR_BUFFERTOOSMALL,并且缓冲区的前两个字节包括需要的大小。
如果使用NT 4.0,必须安装SP2以上版本,否则不管nMaxFile设置成多大,Windows最多返回2562个字符。
微软的Knowledge Base的文章:“Q131462 HOWTO: Handle FNERR_BUFFERTOOSMALL in Windows 95”提供了另一种方法。
bacchus的意见:
我用的方法是:GetStartPosition()和GetNextPathName(),代码如下:
CFileDialog fileDlg(TRUE,_T("*.mif"),_T("*.*"),OFN_ALLOWMULTISELECT,szFilter,NULL);
LPOPENFILENAME lpofn ;
char szBuffer[6000];
fileDlg.m_ofn.lpstrFile = szBuffer;
fileDlg.m_ofn.nMaxFile = 6000;
if(fileDlg.DoModal() == IDCANCEL)
return FALSE;
pos = fileDlg.GetStartPosition();
while((strfilename=fileDlg.GetNextPathName(pos))!= NULL)
{
........
}
此问题由李海回答。
附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, 磁盘、文件和目录, disk, file, fat, directory, folder。
|
| |
|
| |
|
| |
|
|