[轉載] 使用CFileDialog選擇多個文件

使用CFileDialog類並設置OFN_ALLOWMULTISELECT標誌時,OPENFILENAME結構體的lpstrFile成員是一個指向用戶申請分配的緩衝區,裏面接受所選的路徑和文件名列表,這個列表的每一項由一個NULL隔開,最末以兩個NULL結束。nMaxFile成員指明瞭緩衝區的大小,如果所選擇的文件名的加起來的總長度超過了此值,則DoModal函數返回IDCANCEL,如果用戶試圖打開超過緩衝區大小的文件集的話,CommDlgExtendedError()將返回FNERR_BUFFERTOOSMALL,這時候,lpstrFile的前兩個byte將會包含實際需要的緩衝區的字節數。   

如果是在Windows NT 4.0下,能被拷貝到lpstrFile緩衝區的字節數被限制在2562字節以內,如果超過將被截斷。   

以下是一個使用該類進行多文件名選擇的例子。

#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 ", 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等有關信息。 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章