使用CFileDialog類並設置OFN_ALLOWMULTISELECT標誌時,OPENFILENAME結構體的lpstrFile成員是一個指向用戶申請分配的緩衝區,裏面接受所選的路徑和文件名列表,這個列表的每一項由一個NULL隔開,最末以兩個NULL結束。nMaxFile成員指明瞭緩衝區的大小,如果所選擇的文件名的加起來的總長度超過了此值,則DoModal函數返回IDCANCEL,如果用戶試圖打開超過緩衝區大小的文件集的話,CommDlgExtendedError()將返回FNERR_BUFFERTOOSMALL,這時候,lpstrFile的前兩個byte將會包含實際需要的緩衝區的字節數。
如果是在Windows NT 4.0下,能被拷貝到lpstrFile緩衝區的字節數被限制在2562字節以內,如果超過將被截斷。
以下是一個使用該類進行多文件名選擇的例子。
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 ", nCount);
AfxMessageBox(str);
}
else if(iReturn == IDCANCEL)
AfxMessageBox("Cancel");
if(CommDlgExtendedError() == FNERR_BUFFERTOOSMALL)
AfxMessageBox("BUFFERTOOSMALL");
delete []pc;
如果需要進一步的信息,可以參看:http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcmfc98/html/_mfc_cfiledialog.asp以及Q179372等有關信息。