CFileDialog ofOpen(true);
ofOpen.m_ofn.Flags^=OFN_ENABLESIZING;
ofOpen.m_ofn.Flags|=OFN_ALLOWMULTISELECT;
ofOpen.m_ofn.lpstrFilter="所有网页文件\0*.asp;*.htm;*.html;*.php\0";
if(ofOpen.DoModal()==IDOK)
{
POSITION pos=ofOpen.GetStartPosition();
LVITEM lvFile;
int countPos = m_lcFileList->GetItemCount();
int TotalCount = countPos;
CString strFileName;
while(pos)
{
strFileName = ofOpen.GetNextPathName(pos);
if(strFileName=="")break;
if(CompListFile(strFileName,TotalCount))
{
lvFile.mask=LVIF_TEXT | LVIF_IMAGE;
strFileList[countPos++]=strFileName;
int nPos = strFileName.ReverseFind('\\');
lvFile.pszText = (LPTSTR)(const char*)strFileName.Right(strFileName.GetLength()-nPos-1);
lvFile.iItem=countPos;
lvFile.iSubItem = 0;
lvFile.iImage = 0;
m_lcFileList->InsertItem(&lvFile);
}
};
}
ofOpen.m_ofn.Flags^=OFN_ENABLESIZING;
ofOpen.m_ofn.Flags|=OFN_ALLOWMULTISELECT;
ofOpen.m_ofn.lpstrFilter="所有网页文件\0*.asp;*.htm;*.html;*.php\0";
if(ofOpen.DoModal()==IDOK)
{
POSITION pos=ofOpen.GetStartPosition();
LVITEM lvFile;
int countPos = m_lcFileList->GetItemCount();
int TotalCount = countPos;
CString strFileName;
while(pos)
{
strFileName = ofOpen.GetNextPathName(pos);
if(strFileName=="")break;
if(CompListFile(strFileName,TotalCount))
{
lvFile.mask=LVIF_TEXT | LVIF_IMAGE;
strFileList[countPos++]=strFileName;
int nPos = strFileName.ReverseFind('\\');
lvFile.pszText = (LPTSTR)(const char*)strFileName.Right(strFileName.GetLength()-nPos-1);
lvFile.iItem=countPos;
lvFile.iSubItem = 0;
lvFile.iImage = 0;
m_lcFileList->InsertItem(&lvFile);
}
};
}
得到文件的名称,有GetStartPosition可以得到列表
我用的是ListCtrl
其实与ListBox差不多
CompListFile(?,?)是我自己建的方法,主要负责列表中是否已经存在该文件名
取对话框里的文件名主要用
GetStartPosition()
GetNextPathName(pos)
执行一次 GetNextPathName pos 自动会变为下一个项的位置,不用手工改变
如果pos为NULL则取完文件名了