扩充文件选择对话框的多选能力 我们都会使用VC的CfileFialog类进行文件选择操作,使用非常简单,通常代码如下: CFileDialog mFileDlg(TRUE, NULL,NULL, OFN_ALLOWMULTISELECT,"All Files (*.*)&line;*.*&line; &line;", AfxGetMainWnd()); //初始化一个CFIleDialog类,设置多选标志 CString pathName; If(mFileDlg.DoModal ()==IDOK) { POSITION mPos=mFileDlg.GetStartPosition(); while(mPos!=NULL) { pathName=mFileDlg.GetNextPathName(mPos); TRACE("%s\n",pathName); } } else TRACE("IDCANCLE\n"); 以上是一段显示文件选择对话框http://www.shengfang.org进行多选,然后显示每个文件名的代码,我调试程序的时候似乎很正常,可以进行多选,不会出错,但是一次我不经意的进入WIN98目录,用鼠标选择了大量文件后,调试信息中显示返回是IDCANCLE,可是我明明是选择了"打开"按钮的,经过反复调试,终于解决了这个问题。 原来,CfileDialog类有一个成员变量:m_ofn,定义为一个OPENFILENAME结构,在这个接口里,可以设置各种文件对话框的初始化信息,如果我们进行多选,那么需要重新设置其中的两个变量: LPTSTR lpstrFile; DWORD nMaxFile; 这两个变量就是定义为存放返回的文件名的字符串及其大小,如果我们在前面的代码中增加一行,TRACE("nMaxFile :%d\n",mFileDlg.m_ofn.nMaxFile);查看WINDOWS默认大小,就会发现原来只能存发260个字符,所以我们必须自己重新定义字符串大小。代码如下: CFileDialog mFileDlg(TRUE, NULL,NULL, OFN_ALLOWMULTISELECT,"All Files (*.*)&line;*.*&line; &line;", AfxGetMainWnd()); mFileDlg.m_ofn.lpstrFile=new char[2000]; //重新定义存放选择文件名称的字符串 memset(mFileDlg.m_ofn.lpstrFile,0,2000); //进行初始化 mFileDlg.m_ofn.nMaxFile =2000; //重新定义字符串大小 //2000这个数值可以根据需要进行调整,以便更好符合程序实际应用情况。 ….. delete mFileDlg.m_ofn.lpstrFile; //最后手工释放资源 由此就解决了CfileDialog对话框类默认存放文件名过小的问题,同时也提醒我们任何一个程序都需要进行各种模拟测试,不要简单测试正常就http://www.shengfang.org通过,否则,因为不同用户有不同的环境,程序发行后就会很容易产生各种问题。
字体:大 中 小 |