当前位置:编程学习 > VC++ >>

VC6.0中CFileDialog怎么选择多个文件?

在VC6.0中使用CFileDialog类时,怎么设定选择多个文件?谢谢!
答案:下面代码,可以选择文件夹,但是不能选文件
需要自己查找文件
char* GetPath(HWND hWnd,char* pBuffer) 
{ 
	BROWSEINFO   bf; 
	LPITEMIDLIST   lpitem; 
	memset(&bf,0,sizeof   BROWSEINFO); 
	bf.hwndOwner=hWnd; 
	bf.lpszTitle= "选择路径"; 
	bf.ulFlags=BIF_RETURNONLYFSDIRS;  //属性你可自己选择 
	lpitem=SHBrowseForFolder(&bf); 
	if(lpitem==NULL)     //如果没有选择路径则返回   0 
		return   0; 
	//如果选择了路径则复制路径,返回路径长度 
	SHGetPathFromIDList(lpitem,pBuffer); 
	return   pBuffer; 
} 
----------------------------------------------------
或者

#include   "cderr.h "   //for   definition   of   FNERR_BUFFERTOOSMALL 

            CFileDialog       dlg(   TRUE,   NULL,   NULL,   OFN_ALLOWMULTISELECT,   NULL,   NULL   );
            DWORD   MAXFILE   =   4000 
            dlg.m_ofn.nMaxFile   =   MAXFILE; 
            char*   pc   =   new   char[MAXFILE]; 
            dlg.m_ofn.lpstrFile   =   pc; 
            dlg.m_ofn.lpstrFile[0]   =   NULL; 

            int   iReturn   =   dlg.DoModal(); 
            if(iReturn   ==     IDOK) 
            { 
                  int   nCount   =   0; 
                  POSITION   pos   =   dlg.GetStartPosition(); 
                  while   (pos   !=   NULL) 
                  { 
                        dlg.GetNextPathName(pos); 
                        nCount++; 
                  } 
                  CString   str; 
                  str.Format( "Successfully   opened   %d   files\n ",   nCount); 
                  AfxMessageBox(str); 
            } 
            else   if(iReturn   ==   IDCANCEL) 
                  AfxMessageBox( "Cancel "); 

            if(CommDlgExtendedError()   ==   FNERR_BUFFERTOOSMALL) 
                  AfxMessageBox( "BUFFERTOOSMALL "); 
            delete   []pc; 
--------------------
第二个代码没测试过,不知道好不好使
都是找的
其他:需要指定OFN_ALLOWMULTISELECT:

#define   DLG_FILTER   "txt   Files   (*.txt)|*.txt|| " 
#define   DLG_EXT   "txt " 

CFileDialog   dlg(TRUE,   _T(DLG_EXT),   NULL,   OFN_HIDEREADONLY   |   OFN_OVERWRITEPROMPT   |   OFN_ALLOWMULTISELECT,   _T(DLG_FILTER)); 

if   (dlg.DoModal()   ==   IDOK) 
{ 
POSITION   pos   =   dlg.GetStartPosition(); 

while   (pos   !=   0) 
{ 
CString   s   =   dlg.GetNextPathName(pos); 
} 
}

上一个:怎么使用VC++6.0的MFC-DIALOG实现点击窗口的一个新建BUTTON打开并显示电脑上的一个txt文本文档
下一个:VC6.0中两整数相除,它的余数是怎么处理?

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,