shamantou blog site

shamantou@gmail.com

导航

使用CFileDialog类选择多个文件,发现可选择的个数有限
 使用CFileDialog类选择多个文件,发现可选择的个数有限
编号:QA002163  
建立日期:1999年12月3日最后修改日期:2004年2月5日
所属类别:C/C++ - 磁盘、文件和目录
  
    操作系统: 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)

    
{

    
........

    
}
    

    

<< 上海交通大学学分基点计算公式DICOM3.0影像文件中的平面和立体坐标信息 >>

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最近发表

Powered By Z-Blog 1.8 Arwen Build 81206 Copyright 2006-2009 | ooplab.org | shamantou@gmail.com | 沪ICP备08011244号 | Some Rights Reserved.