CFileDialog::CFileDialog
呼叫這個函式所建構標準 Windows 檔案對話方塊。
explicit CFileDialog(
BOOL bOpenFileDialog,
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL,
DWORD dwSize = 0,
BOOL bVistaStyle = TRUE
);
參數
[in] bOpenFileDialog
指定的參數建立的對話方塊。 設定這個 TRUE 建構 [開啟的檔案。] 對話方塊。 設定這個 FALSE 建構 [檔案儲存] 對話方塊。[in] lpszDefExt
預設的副檔名。 如果使用者在檔名方塊不包括含有使用者電腦上的關聯) 已知的副檔名 (一個 lpszDefExt ,指定副檔名會自動附加至檔案名稱。 如果這個參數是 NULL,擴充未附加。[in] lpszFileName
出現在檔名方塊初始檔案名稱。 如果 NULL,不包含初始檔案名稱出現。[in] dwFlags
一或多個旗標的組合可用來自訂對話方塊。 這些描述的旗標,請在 Windows SDK的 OPENFILENAME 結構。 如果您修改 m_ofn.Flags 結構成員,請使用位元 OR 運算子在您變更保持預設行為不變。[in] lpszFilter
指定篩選您一系列的字串轉換成可套用至檔案。 如果您指定檔案篩選條件,,只有符合篩選條件準則會出現在檔案清單中的檔案。 請參閱 <備註> 一節相關詳細資訊的檔案篩選條件一起使用。[in] pParentWnd
指標到檔案對話方塊的父視窗或主控視窗。[in] dwSize
OPENFILENAME 結構的大小。 此值取決於作業系統版本。 MFC 會使用此參數判斷這種適當的對話方塊建立 (例如,而不是 NT 對話方塊的新 Windows 2000 對話方塊)。 預設大小為 0 表示 MFC 程式碼會判斷正確的對話方塊大小根據程式執行的作業系統版本的用途。[in] bVistaStyle
為,當您在 Windows Vista 或更新版本,執行注意事項。 這個參數可用於 Visual Studio 2008 (含) 以後版本都將導致、新樣式對話方塊使用。指定檔案對話方塊的樣式的參數。 設定為 TRUE 使用新的 Vista 樣式檔案對話方塊。 否則,會使用對話方塊舊樣式。 請參閱 <備註> 一節有關在 Vista 下的詳細資訊。
備註
[檔案開啟] 或 [檔案儲存] 對話方塊會根據 bOpenFileDialog的值所建構,。
指定使用 lpszDefExt 的預設副檔名可能無法產生預期的行為,,因為它不可預測的哪些副檔名有使用者電腦上的檔案關聯。 如果您需要對附加的一個或多個控制項的副檔名,您可以從 CFileDialog衍生您自己的類別,並覆寫 CFileDialog::OnFileNameOK 方法會執行您的擴充處理。
在呼叫 DoModal之前,若要允許使用者選取多個檔案,請設定 OFN_ALLOWMULTISELECT 旗標。 您必須提供您自己的檔名緩衝區儲存多個檔案名稱傳回的清單。 透過取代 m_ofn.lpstrFile 與指標對您有所配置的緩衝區,,在建構之後, CFileDialog,但是,在呼叫 DoModal之前。 此外,您必須使用字元數目的 m_ofn.nMaxFile 緩衝區中所指向的 m_ofn.lpstrFile。 如果您設定要選取的檔案數目上限,對 n所需的緩衝區大小為 n* _MAX_PATH (+ 1) + 1。 例如:
#define MAX_CFileDialog_FILE_COUNT 99
#define FILE_LIST_BUFFER_SIZE ((MAX_CFileDialog_FILE_COUNT * (MAX_PATH + 1)) + 1)
CString fileName;
wchar_t* p = fileName.GetBuffer( FILE_LIST_BUFFER_SIZE );
CFileDialog dlgFile(TRUE);
OPENFILENAME& ofn = dlgFile.GetOFN( );
ofn.Flags |= OFN_ALLOWMULTISELECT;
ofn.lpstrFile = p;
ofn.nMaxFile = FILE_LIST_BUFFER_SIZE;
dlgFile.DoModal();
fileName.ReleaseBuffer();
wchar_t* pBufEnd = p + FILE_LIST_BUFFER_SIZE - 2;
wchar_t* start = p;
while( ( p < pBufEnd ) && ( *p ) )
p++;
if( p > start )
{
_tprintf(_T("Path to folder where files were selected: %s\r\n\r\n"), start );
p++;
int fileCount = 1;
while( ( p < pBufEnd ) && ( *p ) )
{
start = p;
while( ( p < pBufEnd ) && ( *p ) )
p++;
if( p > start )
_tprintf(_T("%2d. %s\r\n"), fileCount, start );
p++;
fileCount++;
}
}
使用滑鼠或鍵盤,若要讓使用者調整大小的檔案總管樣式的對話方塊,請設定 OFN_ENABLESIZING 旗標。 才能提供攔截程序或自訂樣板,請將這個旗標是必要的。 旗標只與檔案總管樣式的對話方塊一起使用;舊式對話方塊無法調整大小。
lpszFilter 參數是用來判斷檔案在檔案清單必須顯示檔案名稱的型別。 在字串中的第一個字串說明篩選條件;第二個字串表示擴充功能使用。 多個副檔名可以指定使用分號 (「; 字元」) 做為分隔符號。 具有兩個字串的結尾「|」字元,後面接著 NULL 字元。 您可以為這個參數也使用 CString 物件。
例如, Microsoft Excel 等允許使用者加入至具有副檔名 .xlc 的開啟檔案 (圖形) 或 .xls (工作表)。 Excel 的篩選條件可以撰寫如下:
static TCHAR BASED_CODE szFilter[] = _T("Chart Files (*.xlc)|*.xlc|")
_T("Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|")
_T("*.xlc; *.xls|All Files (*.*)|*.*||");
不過,因此,如果您計劃使用這個字串直接更新 OPENFILENAME 結構,您應該分隔以 null 字元, 「\ 0 "的字串,而不是垂直線 (「|」)。
bVistaStyle 參數是適當的,只有在 Windows Vista。 在 Windows 下舊版,則會忽略這個參數。 如果 bVistaStyle 設定為 TRUE,否則,當您編譯 Visual Studio 2008 (含) 以後版本的程式時,會使用新的 Vista 樣式 [檔案對話方塊] 。 否則,會使用前一個 MFC 樣式 [檔案對話方塊] 。 如需詳細資訊,請參閱 CFileDialog 類別。
對話方塊範本會根據 bVistaStyle的對話方塊不支援
範例
請參閱 CFileDialog::DoModal範例。
需求
Header:afxdlgs.h