CFileDialog dlg(TRUE,NULL,NULL,OFN_ALLOWMULTISELECT,NULL,NULL);
DWORD MAXFILE=50;
TCHAR* pc=new TCHAR[MAXFILE*(MAX_PATH+1)+1];
pc[0]=pc[1]=0;
dlg.m_ofn.nMaxFile=MAXFILE;
dlg.m_ofn.lpstrFile=pc;
if(dlg.DoModal()==IDOK)
{
POSITION pos =dlg.GetStartPosition();
while(pos != NULL)
{
CString szFileName;
szFileName=dlg.GetNextPathName(pos);
pixelFilePathName.push_back(szFileName);
dcmNum++;
}
MessageBox(pixelFilePathName[0]);
}else if(dlg.DoModal()==IDCANCEL)
{
exit(0);
}
我想读取多个文件,但是发现只能读取选中的第一个文件,经过调试,发现是执行了szFileName=dlg.GetNextPathName(pos);后pos的值变为0x00000000了,这是为什么?
CString szFilters="DOC Files (*.doc)|*.doc|All Files (*.*)|*.*||";
CFileDialog fileDlg1 (TRUE, "doc", "*.doc",OFN_FILEMUSTEXIST|OFN_ALLOWMULTISELECT, szFilters, NULL);
if( fileDlg1.DoModal ()==IDOK )
{
POSITION pos;
pos=fileDlg1.GetStartPosition();//开始遍历用户选择文件列表
while (pos!=NULL)
{
CString filename=fileDlg1.GetNextPathName(pos);
}
#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);
}
}
测试是可以的 ,你是不是没有加 OFN_ALLOWMULTISELECT这个选项呢