CFileDialog 類別

封裝用於檔案開啟或檔案儲存作業的通用對話框。

語法

class CFileDialog : public CCommonDialog

成員

公用建構函式

名稱 描述
CFileDialog::CFileDialog 建構 CFileDialog 物件。

公用方法

名稱 描述
CFileDialog::AddCheckButton 將核取按鈕新增至對話框。
CFileDialog::AddComboBox 將下拉式方塊新增至對話框。
CFileDialog::AddControlItem 將專案新增至對話框中的容器控件。
CFileDialog::AddEditBox 將編輯方塊新增至對話框。
CFileDialog::AddMenu 將功能表新增至對話框。
CFileDialog::AddPlace 已多載。 將資料夾新增至可供使用者開啟或儲存專案的位置清單。
CFileDialog::AddPushButton 將按鈕新增至對話框。
CFileDialog::AddRadioButtonList 將單選按鈕(也稱為單選按鈕)群組新增至對話方塊。
CFileDialog::AddSeparator 將分隔符加入對話框。
CFileDialog::AddText 將文字內容新增至對話框。
CFileDialog::ApplyOFNToShellDialog 更新 的狀態 CFileDialog ,以符合儲存在成員變數中的 m_ofn 參數和旗標。
CFileDialog::D oModal 顯示對話框,並讓用戶進行選取。
CFileDialog::EnableOpenDropDown 在對話框中的 [開啟 ] 或 [儲存 ] 按鈕上啟用下拉式清單。
CFileDialog::EndVisualGroup 停止將專案加入至對話框中的視覺群組。
CFileDialog::GetCheckButtonState 取得對話框中複選框的目前狀態。
CFileDialog::GetControlItemState 取得對話框中找到之容器控件中專案的目前狀態。
CFileDialog::GetControlState 取得指定控制件的目前可見度和啟用狀態。
CFileDialog::GetEditBoxText 取得編輯框控制件中的目前文字。
CFileDialog::GetFileExt 傳回所選檔案的擴展名。
CFileDialog::GetFileName 傳回選取檔案的檔案名。
CFileDialog::GetFileTitle 傳回所選檔案的標題。
CFileDialog::GetFolderPath 擷取 [檔案總管] 樣式的 [開啟] 或 [另存新檔] 通用對話方塊之目前開啟資料夾或目錄的路徑。
CFileDialog::GetIFileDialogCustomize 擷取自定義 CFileDialog 對象的內部 COM 物件。
CFileDialog::GetIFileOpenDialog CFileDialog擷取做為 [開啟檔案] 對話方塊之 的內部 COM物件。
CFileDialog::GetIFileSaveDialog CFileDialog擷取做為 [儲存盤案] 對話方塊之的內部 COM 物件。
CFileDialog::GetNextPathName 傳回下一個選取檔案的完整路徑。
CFileDialog::GetOFN OPENFILENAME擷取 對象的結構CFileDialog
CFileDialog::GetPathName 傳回所選取檔案的完整路徑。
CFileDialog::GetReadOnlyPref 傳回選取檔案的唯讀狀態。
CFileDialog::GetResult 取得使用者在對話框中所做的選擇。
CFileDialog::GetResults 取得對話框中允許用戶選擇的選項。
CFileDialog::GetSelectedControlItem 從對話框中的指定容器控制項取得特定專案。
CFileDialog::GetStartPosition 傳回檔名清單第一個專案的位置。
CFileDialog::HideControl 在 [檔案總管] 樣式 的 [開啟 ] 或 [另存新檔 ] 通用對話框中隱藏指定的控件。
CFileDialog::IsPickFoldersMode 判斷資料夾選擇器模式中的目前對話方塊。
CFileDialog::MakeProminent 將控件放在對話框中,使其與其他新增的控件相較之下脫穎而出。
CFileDialog::RemoveControlItem 從對話框中的容器控件中移除專案。
CFileDialog::SetCheckButtonState 設定對話框中複選框的目前狀態。
CFileDialog::SetControlItemState 設定對話框中找到之容器控件中專案的目前狀態。
CFileDialog::SetControlItemText 設定控件專案的文字。 例如,單選按鈕或功能表中專案隨附的文字。
CFileDialog::SetControlLabel 設定與控件相關聯的文字,例如按鈕文字或編輯框標籤。
CFileDialog::SetControlState 設定指定控制件的目前可見度和啟用狀態。
CFileDialog::SetControlText 在 [檔案總管] 樣式 的 [開啟 ] 或 [另存新檔 ] 通用對話框中,設定指定控件的文字。
CFileDialog::SetDefExt 設定檔案總管樣式 的 [開啟 ] 或 [另存新檔 ] 通用對話框的默認擴展名。
CFileDialog::SetEditBoxText 設定編輯框控制件中的目前文字。
CFileDialog::SetProperties 提供屬性儲存區,可定義要用於所儲存之項目的預設值。
CFileDialog::SetSelectedControlItem 在單選按鈕群組或對話框中找到的下拉式方塊中,設定特定項目的選取狀態。
CFileDialog::SetTemplate 設定物件的對話框範本 CFileDialog
CFileDialog::StartVisualGroup 在對話框中宣告視覺群組。 後續對任何「新增」方法的呼叫會將這些專案新增至此群組。
CFileDialog::UpdateOFNFromShellDialog 更新儲存在 m_ofn 成員變數中的數據,以符合檔案對話框的目前狀態。

受保護的方法

名稱 描述
CFileDialog::OnButtonClicked 按兩下按鈕時呼叫。
CFileDialog::OnCheckButtonToggled 核取/取消核取複選框時呼叫。
CFileDialog::OnControlActivating 當控件處於作用中狀態時呼叫。
CFileDialog::OnFileNameChange 處理WM_NOTIFY CDN_SELCHANGE訊息。
CFileDialog::OnFileNameOK 驗證對話框中輸入的檔名。
CFileDialog::OnFolderChange 處理WM_NOTIFY CDN_FOLDERCHANGE訊息。
CFileDialog::OnInitDone 處理WM_NOTIFY CDN_INITDONE訊息。
CFileDialog::OnItemSelected 選取容器專案時呼叫。
CFileDialog::OnLBSelChangedNotify 可讓您在檔案選取範圍變更時執行自定義動作。
CFileDialog::OnShareViolation 處理共享違規。
CFileDialog::OnTypeChange 處理WM_NOTIFY CDN_TYPECHANGE訊息。

公用資料成員

名稱 描述
CFileDialog::m_ofn Windows OPENFILENAME 結構。 提供基本檔案對話框參數的存取權。

備註

一般檔案對話框可讓您實作檔案選取對話方塊,例如, 以符合Windows標準的方式開啟檔案另存新檔。

您可以 CFileDialog 和提供的建構函式一起使用,也可以從 CFileDialog 衍生自己的對話框類別,並撰寫建構函式以符合您的需求。 不論是哪一種情況,這些對話框的行為都會像標準 MFC 對話框一樣,因為它們衍生自 CCommonDialog 類別CFileDialog 依賴 Windows 中包含的COMMDLG.DLL檔案。

使用 Windows Vista 或更新版本的外觀和功能 CFileDialog 與舊版 Windows 不同。 如果編譯程式並在 Windows Vista 或更新版本下執行程式,則預設 CFileDialog 會自動使用新的 Windows Vista 或更新版本樣式,而不需要變更程式代碼。 使用建 構函式中的 bVistaStyle 參數,手動覆寫此自動更新。 自動更新的例外是自定義對話框。 它們不會轉換成新的樣式。 如需建構函式的詳細資訊,請參閱 CFileDialog::CFileDialog

注意

當您使用 CFileDialog時,控件標識符系統在 Windows Vista 或更新版本中與舊版 Windows 不同。 您必須先更新程式代碼中控制件的所有參考 CFileDialog ,才能從舊版 Windows 移植專案。

Windows Vista 或更新版本不支援某些 CFileDialog 方法。 如需是否支援方法的相關信息,請參閱個別方法主題。 此外,Windows Vista 或更新版本不支援下列繼承的函式:

類別的 CFileDialog Windows 訊息會根據您使用的作業系統而有所不同。 例如,Windows XP 不支援 類別的 CFileDialog CDialog::OnCancelCDialog::OnOK。 不過,Windows Vista 和更新版本的作業系統確實支持它們。 如需所產生之不同訊息及其接收順序的詳細資訊,請參閱 CFileDialog 範例:記錄事件順序

若要使用 CFileDialog 物件,請先使用 CFileDialog 建構函式建立 物件。 建構對話框之後,您可以設定或修改 CFileDialog::m_ofn 結構中的任何值,以初始化對話方塊控制件的值或狀態。 結構 m_ofn 的類型為 OPENFILENAME。 如需詳細資訊,請參閱 Windows SDK 中的 OPENFILENAME 結構。

初始化對話框控件之後,請呼叫 CFileDialog::D oModal 方法來顯示對話方塊,讓使用者可以輸入路徑和檔名。 DoModal 會傳回使用者按兩下 [確定] 或 [取消] 或 [IDCANCEL] 按鈕。 如果 DoModal 傳回 IDOK,您可以使用其中 CFileDialog 一個公用成員函式來擷取使用者放入的資訊。

注意

在 Windows Vista 或更新版本下,多次呼叫 IFileDialog::SetFileTypes 會造成錯誤。 第二個 CFileDialog 對 實例的呼叫SetFileTypes將會傳回 Windows Vista 或更新版本中E_UNEXPECTED。 某些 CFileDialog 方法函式會呼叫 SetFileTypes。 例如,針對相同 實例對的兩個CFileDialog呼叫CFileDialog::DoModal會產生ASSERT

CFileDialog 包含數個受保護的成員,可讓您自定義處理共用違規、檔名驗證和清單框變更通知。 這些受保護的成員是大部分應用程式不需要使用的回呼函式,因為默認處理會自動執行。 這些函式不需要訊息對應專案,因為它們是標準虛擬函式。

您可以使用 Windows CommDlgExtendedError 函式來判斷對話框初始化期間是否發生錯誤,並深入了解錯誤。

物件的解構 CFileDialog 會自動處理。 您不需要呼叫 CDialog::EndDialog

若要讓用戶選取多個檔案,請在呼叫 DoModal之前設定OFN_ALLOWMULTISELECT旗標。 您必須提供您自己的檔名緩衝區,以容納傳回的多個檔名清單。 在建構 CFileDialog之後,將 取代m_ofn.lpstrFile為您配置的緩衝區指標,但在呼叫 DoModal之前,請執行此動作。

此外,您必須使用 所m_ofn.lpstrFile指向之緩衝區中的字元數來設定 m_ofn.nMaxFile 。 如果您將選取的檔案數目上限設定為 n,所需的緩衝區大小為 n * (_MAX_PATH + 1) + 1。 緩衝區中傳回的第一個專案是選取檔案的資料夾路徑。 針對 Windows Vista 或更新樣式的對話框,目錄和檔名字符串會以 Null 結尾,並在姓氏後面加上額外的 Null 字元。 此格式可讓 Explorer 樣式對話框傳回包含空格的長檔名。 對於舊樣式對話框,目錄和檔名字符串會以空格分隔,而函式會針對具有空格的檔名使用簡短檔名。

下列範例示範如何使用緩衝區來擷取及列出多個檔名。

#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++;
  }
}

若要變更緩衝區大小以響應選取多個檔名的使用者,您必須從 CFileDialog 衍生新的類別,並覆寫 CFileDialog::OnFileNameChange 方法。

如果您從 CFileDialog衍生新的類別,您可以使用訊息對應來處理任何訊息。 若要擴充預設訊息處理,請從 CFileDialog衍生類別、將訊息對應新增至新類別,並提供新訊息的成員函式。 您不需要提供勾點函式來自定義對話方塊。

若要自定義對話框,請從 CFileDialog衍生類別、提供自定義對話框範本,以及新增訊息對應來處理擴充控件中的通知訊息。 將任何未處理的訊息傳遞至基類。 您不需要自定義攔截函式。

當您使用的 Windows Vista 或更新版本樣式 CFileDialog時,無法使用訊息對應和對話框範本。 相反地,您必須針對類似的功能使用 COM 介面。

如需如何使用 CFileDialog的詳細資訊,請參閱 通用對話框類別

繼承階層架構

CObject

CCmdTarget

CWnd

CDialog

CCommonDialog

CFileDialog

需求

標頭: afxdlgs.h

CFileDialog::AddCheckButton

將核取按鈕新增至對話框。

HRESULT AddCheckButton(
    DWORD dwIDCtl,
    const CString& strLabel,
    BOOL bChecked);

參數

dwIDCtl
要新增之核取按鈕的標識碼。

strLabel
核取按鈕名稱。

bChecked
布爾值,指出核取按鈕的目前狀態。 如果已核取則為TRUE;否則為 FALSE

備註

CFileDialog::AddComboBox

將下拉式方塊新增至對話框。

HRESULT AddComboBox(DWORD dwIDCtl);

參數

dwIDCtl
要加入的下拉式方塊標識碼。

備註

CFileDialog::AddControlItem

將專案新增至對話框中的容器控件。

HRESULT AddControlItem(
    DWORD dwIDCtl,
    DWORD dwIDItem,
    const CString& strLabel);

參數

dwIDCtl
要加入專案之容器控件的標識碼。

dwIDItem
項目的標識碼。

strLabel
專案的文字。

備註

CFileDialog::AddEditBox

將編輯方塊新增至對話框。

HRESULT AddEditBox(
    DWORD dwIDCtl,
    const CString& strText);

參數

dwIDCtl
要加入之編輯框的識別碼。

strText
編輯方塊名稱。

備註

CFileDialog::AddMenu

將功能表新增至對話框。

HRESULT AddMenu(
    DWORD dwIDCtl,
    const CString& strLabel);

參數

dwIDCtl
要加入之功能表的標識碼。

strLabel
功能表名稱。

備註

CFileDialog::AddPlace

將資料夾新增至可供使用者開啟或儲存專案的位置清單。

void AddPlace(
    LPCWSTR lpszFolder,
    FDAP fdap = FDAP_TOP) throw();

void AddPlace(
    IShellItem* psi,
    FDAP fdap = FDAP_TOP) throw();

參數

lpszFolder
要提供給使用者的資料夾路徑。 這隻能是資料夾。

fdap
指定資料夾放置於清單中的位置。

psi
IShellItem 的指標,代表要提供給使用者使用的資料夾。 這隻能是資料夾。

備註

CFileDialog::AddPushButton

將按鈕新增至對話框。

HRESULT AddPushButton(
    DWORD dwIDCtl,
    const CString& strLabel);

參數

dwIDCtl
要新增之按鈕的標識碼。

strLabel
按鈕名稱。

備註

CFileDialog::AddRadioButtonList

將單選按鈕(也稱為單選按鈕)群組新增至對話方塊。

HRESULT AddRadioButtonList(DWORD dwIDCtl);

參數

dwIDCtl
要新增的選項按鈕群組標識碼。

備註

CFileDialog::AddSeparator

將分隔符加入對話框。

HRESULT AddSeparator(DWORD dwIDCtl);

參數

dwIDCtl
分隔符加入的識別碼。

備註

CFileDialog::AddText

將文字新增至對話框。

HRESULT AddText(
    DWORD dwIDCtl,
    const CString& strText);

參數

dwIDCtl
要加入之文字的標識碼。

strText
文字名稱。

備註

CFileDialog::ApplyOFNToShellDialog

根據儲存在數據結構中的值,更新 CFileDialogm_ofn目前狀態

void ApplyOFNToShellDialog();

備註

在 Windows Vista 之前的 Windows 版本中,成員 OPENFILENAME 數據結構會持續與 的狀態 CFileDialog同步處理。 m_ofn成員變數的任何變更都會立即反映在對話框的狀態中。 此外,對話框狀態的任何變更都會立即更新 m_ofn 成員變數。

在 Windows Vista 或更新版本中,成員變數和 狀態CFileDialog中的m_ofn值不保證會同步處理。 此函式會強制更新 的狀態 CFileDialog 以符合 m_ofn 結構。 Windows 會在 CFileDialog::D oModal 期間 自動呼叫此函式

如需如何在 Windows Vista 或更新版本下使用 CFileDialog 類別的詳細資訊,請參閱 CFileDialog 類別

範例

請參閱 CFileDialog::UpdateOFNFromShellDialog 的範例

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);

參數

bOpenFileDialog
[in]參數,指定要建立的對話框類型。 將它設定為TRUE 以建構 [開啟檔案] 對話框。 將它設定為 FALSE,以建構 [ 檔案另存新檔 ] 對話方塊。

lpszDefExt
[in]默認擴展名。 如果使用者未在 [檔名] 方塊中包含已知的擴展名(其中一個在用戶電腦上有關聯),則 lpszDefExt 指定的擴展名會自動附加至檔名。 如果此參數為 NULL,則不會附加任何擴充功能。

lpszFileName
[in]出現在 [檔案名] 方塊中的初始檔名。 如果為 NULL,則不會顯示初始檔名。

dwFlags
[in]您可以用來自定義對話框的一或多個旗標組合。 如需這些旗標的描述,請參閱 Windows SDK 中的 OPENFILENAME 結構。 如果您修改 m_ofn.Flags 結構成員,請在變更中使用位 OR 運算符,讓預設行為保持不變。

lpszFilter
[in]一系列字串組,指定您可以套用至檔案的篩選條件。 如果您指定檔案篩選,則只有符合篩選準則的檔案會出現在 [檔案] 清單中。 如需如何使用檔案篩選的詳細資訊,請參閱一節。

pParentWnd
[in]檔案對話框之父視窗或擁有者視窗的指標。

dwSize
[in]結構的大小 OPENFILENAME 。 此值取決於操作系統版本。 MFC 使用此參數來判斷要建立的適當對話框種類。 默認大小 0 表示 MFC 程式代碼會根據程式執行所在的作業系統版本來判斷要使用的正確對話框大小。

bVistaStyle
[in] 注意 這個參數可在 Visual Studio 2008 和更新版本中使用,而且只有在您在 Windows Vista 或更新版本中執行時,才會使用新樣式對話框。

指定檔案對話框樣式的參數。 將它設定為TRUE,以使用新的 Vista 樣式檔案對話方塊。 否則,將會使用舊樣式的對話框。 如需在 Vista 下執行的詳細資訊,請參閱一節。

備註

根據 bOpenFileDialog 的值,建構 [檔案開啟] 或 [檔案另存新檔] 對話方塊。

使用 lpszDefExt 指定預設延伸模組可能不會產生您預期的行為,因為它很少可預測哪些擴展名在用戶的計算機上具有檔案關聯。 如果您需要對預設延伸模組的附加有更多的控制權,您可以從 衍生自己的類別 CFileDialog,並覆寫 CFileDialog::OnFileNameOK 方法以執行您自己的延伸模塊處理。

若要讓用戶選取多個檔案,請在呼叫 DoModal 之前設定OFN_ALLOWMULTISELECT旗標。 您必須提供您自己的檔名緩衝區,才能儲存傳回的多個檔名清單。 在建構 CFileDialog 之後,將 取代m_ofn.lpstrFile為您配置的緩衝區指標,但在呼叫 DoModal之前,請執行此動作。 此外,您必須使用 所m_ofn.lpstrFile指向之緩衝區中的字元數進行設定m_ofn.nMaxFile。 如果您將選取的檔案數目上限設定為 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 (chart) 或 .xls (worksheet) 的檔案等等。 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樣式 檔案對話框

對話框範本不支援以 bVistaStyle 為基礎的 對話方塊

範例

請參閱 CFileDialog::D oModal 的範例

CFileDialog::D oModal

呼叫此函式以顯示 Windows 通用檔案對話方塊,並允許使用者瀏覽檔案和目錄,並輸入檔名。

virtual INT_PTR DoModal();

傳回值

IDOK 或 IDCANCEL。 如果傳回 IDCANCEL,請呼叫 Windows CommDlgExtendedError 函式來判斷是否發生錯誤。

IDOK 和 IDCANCEL 是常數,指出使用者是否選取 [確定] 或 [取消] 按鈕。

備註

如果您要藉由設定 結構的成員 m_ofn 來初始化各種檔案對話框選項,您應該先執行此動作,再呼叫 DoModal,但在建構對話框對象之後。

例如,如果您想要允許使用者選取多個檔案,請在呼叫 DoModal之前設定OFN_ALLOWMULTISELECT旗標,如本主題的程式碼範例所示。

當使用者按兩下對話框的 [確定] 或 [取消] 按鈕,或從對話框的控件功能表中選取 [關閉] 選項時,控件會傳回至您的應用程式。 然後,您可以呼叫其他成員函式,以擷取使用者輸入到對話框中的設定或資訊。

DoModal 是從類別 CDialog覆寫的虛擬函式。

範例

void CMyClass::OnFileOpen()
{
   // szFilters is a text string that includes two file name filters:
   // "*.my" for "MyType Files" and "*.*' for "All Files."
   TCHAR szFilters[]= _T("MyType Files (*.my)|*.my|All Files (*.*)|*.*||");

   // Create an Open dialog; the default file name extension is ".my".
   CFileDialog fileDlg(TRUE, _T("my"), _T("*.my"),
      OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, szFilters);
   
   // Display the file dialog. When user clicks OK, fileDlg.DoModal() 
   // returns IDOK.
   if(fileDlg.DoModal() == IDOK)
   {
      CString pathName = fileDlg.GetPathName();
   
      // Implement opening and reading file in here.

      //Change the window's title to the opened file's title.
      CString fileName = fileDlg.GetFileTitle();
   
      SetWindowText(fileName);
   }
}

CFileDialog::EnableOpenDropDown

在對話框中的 [開啟] 或 [儲存] 按鈕上啟用下拉式清單。

HRESULT EnableOpenDropDown(DWORD dwIDCtl);

參數

dwIDCtl
下拉式清單的標識碼。

備註

CFileDialog::EndVisualGroup

停止將專案加入至對話框中的視覺群組。

HRESULT EndVisualGroup();

傳回值

如果成功,則傳回S_OK;否則為錯誤值。

備註

CFileDialog::GetCheckButtonState

擷取對話框中複選框的目前狀態。

HRESULT GetCheckButtonState(
    DWORD dwIDCtl,
    BOOL& bChecked);

參數

dwIDCtl
複選框的識別碼。

bChecked
複選框的狀態。 TRUE 表示已核取;FALSE 表示未核取。

備註

CFileDialog::GetControlItemState

擷取對話框中找到之容器控件中專案的目前狀態。

HRESULT GetControlItemState(
    DWORD dwIDCtl,
    DWORD dwIDItem,
    CDCONTROLSTATEF& dwState);

參數

dwIDCtl
容器控件的標識碼。

dwIDItem
項目的標識碼。

dwState
從CDCONTROLSTATE列舉接收多個值的變數參考,指出控件的目前狀態。

備註

CFileDialog::GetControlState

擷取指定控制元件的目前可見度和啟用狀態。

HRESULT GetControlState(
    DWORD dwIDCtl,
    CDCONTROLSTATEF& dwState);

參數

dwIDCtl
控件的標識碼。

dwState
從CDCONTROLSTATE列舉接收一或多個值的變數參考,指出控件的目前狀態。

備註

CFileDialog::GetEditBoxText

擷取編輯框控制器中的目前文字。

HRESULT GetEditBoxText(
    DWORD dwIDCtl,
    CString& strText);

參數

dwIDCtl
編輯框的識別碼。

strText
文字值。

備註

CFileDialog::GetFileExt

呼叫此函式,以擷取在對話框中輸入之檔名的擴展名。

CString GetFileExt() const;

傳回值

檔名的擴展名。

備註

例如,如果輸入的檔名是DATA.TXT, GetFileExt 則會傳回 「TXT」。。

如果 m_ofn.Flags 已設定OFN_ALLOWMULTISELECT旗標,則此字串包含一連串以 Null 終止的字串,其中第一個字串是選取之檔案群組的目錄路徑,後面接著使用者選取的所有檔案名稱。 若要擷取檔案路徑名稱,請使用 GetStartPositionGetNextPathName 成員函式。

CFileDialog::GetFileName

呼叫此函式,以擷取對話框中輸入的檔名名稱。

CString GetFileName() const;

傳回值

檔案的檔名。

備註

檔名同時包含前置詞和擴展名。 例如, GetFileName 會傳回 「TEXT」。檔案 C:\FILES\TEXT.DAT的 DAT“。

如果 m_ofn.FlagsOFN_ALLOWMULTISELECT 設定旗標,您應該呼叫 GetStartPositionGetNextPathName 來擷取檔案路徑名稱。

CFileDialog::GetFileTitle

呼叫此函式,以擷取對話框中輸入的檔案標題。

CString GetFileTitle() const;

傳回值

檔案的標題。

備註

檔案的標題只包含其前置詞,不含路徑或擴展名。 例如, GetFileTitle 會傳回 C:\FILES\TEXT.DAT檔案的 “TEXT”。

如果 m_ofn.Flags 已設定OFN_ALLOWMULTISELECT旗標,則此字串包含一連串以 Null 終止的字串,其中第一個字串是選取之檔案群組的目錄路徑,後面接著使用者選取的所有檔案名稱。 基於這個理由,請使用 GetStartPositionGetNextPathName 成員函式來擷取清單中的下一個檔名。

範例

請參閱 CFileDialog::D oModal 的範例

CFileDialog::GetFolderPath

呼叫這個成員函式,以擷取 [檔案總管] 樣式的 [開啟] 或 [另存新檔] 通用對話框目前開啟的資料夾或目錄的路徑。

CString GetFolderPath() const;

傳回值

包含 目前開啟資料夾或目錄的 CString 物件。

備註

對話框必須已使用OFN_EXPLORER樣式建立;否則,方法會失敗併產生判斷提示。

您只能在對話框顯示時呼叫這個方法。 對話框關閉之後,此函式將無法再運作,而且方法會失敗併產生判斷提示。

CFileDialog::GetIFileDialogCustomize

擷取指定 CFileDialog 之內部 COM 物件的指標。

IFileDialogCustomize* GetIFileDialogCustomize();

傳回值

的內部 COM 物件的 CFileDialog指標。 您有責任適當地釋放此指標。

備註

只有在 Windows Vista 或更新版本下才使用此函式,並將 bVistaStyle 設定為 TRUE 的物件。 如果您在 bVistaStyle 為 FALSE 時使用此函式,它會在發行模式中傳回 NULL,並在偵錯模式中擲回判斷提示。

如需介面的詳細資訊 IFileDialogCustomize ,請參閱 IFileDialogCustomize

範例

此範例會擷取內部 COM 物件。 若要執行此程式碼範例,您必須在 Windows Vista 或更新版本下加以編譯。

// Get the interface pointer
IFileDialogCustomize *customDlgPtr = m_myFileDialogPtr->GetIFileDialogCustomize();

// Make sure that it is not null
if (customDlgPtr != NULL)
{
   //
   // Perform any interface functionality here
   //

   // Release the pointer
   customDlgPtr->Release();
}

CFileDialog::GetIFileOpenDialog

擷取指定 CFileDialog之內部 COM 物件的指標。

IFileOpenDialog* GetIFileOpenDialog();

傳回值

的內部 COM 物件的 CFileDialog指標。 您有責任適當地釋放此指標。

備註

只有在 Windows Vista 或更新版本下才使用此函式,並將 bVistaStyle 設定為 TRUE 的物件。 如果 CFileDialog 不是 [ 開啟 ] 對話框,或 bVistaStyle 設定為 FALSE,則此函式會傳回 NULL。 在此最後一個案例中,函式只會在發行模式中傳回NULL - 在偵錯模式中,它會擲回判斷提示。

如需介面的詳細資訊 IFileOpenDialog ,請參閱 IFileOpenDialog

範例

此範例會擷取內部 COM 物件。 若要執行此程式碼,您必須在 Windows Vista 或更新版本下加以編譯。

// Get the interface pointer
IFileOpenDialog * openDlgPtr = m_myFileDialogPtr->GetIFileOpenDialog();

// Make sure that it is not null
if ( openDlgPtr != NULL )
{
    //
    // Perform any interface functionality here
    //

    // Release the pointer
    openDlgPtr->Release();
}

CFileDialog::GetIFileSaveDialog

擷取指定 CFileDialog之內部 COM 物件的指標。

IFileSaveDialog* GetIFileSaveDialog();

傳回值

的內部 COM 物件的 CFileDialog指標。 您有責任適當地釋放此指標。

備註

只有在 Windows Vista 或更新版本下才使用此函式,並將 bVistaStyle 設定為 TRUE 的物件。 如果 CFileDialog 不是 [ 儲存 ] 對話框,或 bVistaStyle 設定為 FALSE,則此函式會傳回 NULL。 在此最後一個案例中,函式只會在發行模式中傳回NULL - 在偵錯模式中,它會擲回判斷提示。

如需介面的詳細資訊 IFileSaveDialog ,請參閱 IFileSaveDialog

範例

此範例會擷取內部 COM 物件。 若要執行此程式碼範例,您必須在 Windows Vista 或更新版本下加以編譯。

// Get the interface pointer
IFileSaveDialog *saveDlgPtr = m_myFileDialogPtr->GetIFileSaveDialog();

// Make sure that it is not null
if (saveDlgPtr != NULL)
{
   //
   // Perform any interface functionality here
   //

   // Release the pointer
   saveDlgPtr->Release();
}

CFileDialog::GetNextPathName

呼叫此函式,從對話框中選取的群組擷取下一個檔名。

CString GetNextPathName(POSITION& pos) const;

參數

pos
先前 GetNextPathNameGetStartPosition 函數調用所傳回之 POSITION 值的參考。 如果已到達清單結尾,則為NULL。

傳回值

檔案的完整路徑。

備註

檔名的路徑包含檔案的標題加上整個目錄路徑。 例如, GetNextPathName 會傳回 「C:\FILES\TEXT。檔案 C:\FILES\TEXT.DAT的 DAT“。 如果您使用 呼叫 GetStartPosition建立初始位置,則可以GetNextPathName在正向反覆運算循環中使用 。

如果選取範圍只包含一個檔案,則會傳回該檔名。

CFileDialog::GetOFN

擷取相關聯的 OPENFILENAME 結構。

const OPENFILENAME& GetOFN() const;

OPENFILENAME& GetOFN();

傳回值

OPENFILENAME 結構。

備註

使用此函式的第二個版本,初始化建構檔案之後或 [檔案另存新檔] 對話框的外觀,但在使用DoModal成員函式顯示之前。 例如,您可以將 的成員m_ofn設定lpstrTitle為您想要對話框擁有的標題。

CFileDialog::GetPathName

呼叫此函式,以擷取對話框中輸入之檔案的完整路徑。

CString GetPathName() const;

傳回值

檔案的完整路徑。

備註

檔名的路徑包含檔案的標題加上整個目錄路徑。 例如, GetPathName 會傳回 「C:\FILES\TEXT。檔案 C:\FILES\TEXT.DAT的 DAT“。

如果 m_ofn.Flags 已設定OFN_ALLOWMULTISELECT旗標,則此字串會包含一連串以 Null 標記的字串,其中第一個字元串是選取之檔案群組的目錄路徑,後面接著使用者選取的所有檔案名稱。 基於這個理由,請使用 GetStartPositionGetNextPathName 成員函式來擷取清單中的下一個檔名。

範例

請參閱 CFileDialog::D oModal 的範例

CFileDialog::GetReadOnlyPref

呼叫此函式,以判斷是否已在 [Windows 標準檔案開啟] 和 [檔案另存新檔] 對話框中選取 [只讀] 複選框。

BOOL GetReadOnlyPref() const;

傳回值

如果選取對話框中的 [只讀] 複選框,則為非零;否則為 0。

備註

您可以在建構函式中 CFileDialog 設定OFN_HIDEREADONLY樣式,以隱藏 [只讀] 複選框。

注意

Windows Vista 或更新版本的樣式 CFileDialog 物件不支援此函式。 嘗試在 Windows Vista 或更新版本的樣式 CFileDialog 上使用此函式將會擲回 CNotSupportedException

CFileDialog::GetResult

擷取使用者在對話框中所做的選擇。

IShellItem* GetResult() throw();

傳回值

代表用戶選擇之 IShellItem 的指標。

備註

CFileDialog::GetResults

擷取對話框中允許使用者選擇的選項。

IShellItemArray* GetResults() throw();

傳回值

IShellItemArray 的指標,可存取對話框中選取的專案。

備註

CFileDialog::GetSelectedControlItem

從對話框中的指定容器控件擷取特定專案。

HRESULT GetSelectedControlItem(
    DWORD dwIDCtl,
    DWORD& dwIDItem);

參數

dwIDCtl
容器控件的標識碼。

dwIDItem
使用者在控件中選取之專案的標識碼。

備註

CFileDialog::GetStartPosition

如果 m_ofn.Flags 已設定OFN_ALLOWMULTISELECT旗標,請呼叫這個成員函式,以擷取清單中第一個檔案路徑名稱的位置。

POSITION GetStartPosition() const;

傳回值

可用於反覆運算的 POSITION 值;如果清單是空的,則為NULL。

CFileDialog::HideControl

呼叫這個成員函式,以在 [總管] 樣式的 [開啟] 或 [另存新檔] 通用對話框中隱藏指定的控件。

void HideControl(int nID);

參數

nID
要隱藏之控件的標識碼。

備註

對話框必須已使用OFN_EXPLORER樣式建立;否則,函式會失敗並顯示判斷提示。

CFileDialog::IsPickFoldersMode

判斷目前對話框是否處於資料夾選擇器模式。

BOOL IsPickFoldersMode() const;

傳回值

如果對話框處於資料夾選擇器模式,則為TRUE;否則為 FALSE。

備註

CFileDialog::m_ofn

m_ofn 是類型的 OPENFILENAME結構。 此結構中的數據代表 的 CFileDialog目前狀態。

備註

使用此結構來初始化 [檔案開啟] 或 [檔案另存新檔] 對話框的外觀之後,但在使用 DoModal 方法顯示它之前。 例如,您可以將 的 m_ofn lpstrTitle 成員設定為您想要對話框擁有的標題。

使用 CFileDialogWindows Vista 或更新版本樣式,m_ofn不保證一律符合對話框的狀態。 它會與舊版 Windows 中的對話框同步處理。 如需同步m_ofn處理 Windows Vista 或更新版本下結構和CFileDialog狀態的詳細資訊,請參閱 CFileDialog::ApplyOFNToShellDialogCFileDialog::UpdateOFNFromShellDialog

Windows Vista 或更新版本的樣式檔案對話框不支援 的特定成員和 旗標 CFileDialog。 因此,這些不會有任何作用。

以下是 Windows Vista 或更新版本不支援的成員清單:

  • lpstrCustomFilter

  • lpstrInitialDir

  • lCustData

  • lpfnHook

  • lpTemplateName

不支援下列旗標,因此當您使用 Windows Vista 或更新版本的 樣式 CFileDialog時,不會有任何作用:

  • OFN_ENABLEHOOK

  • OFN_ENABLEINCLUDENOTIFY

  • OFN_ENABLETEMPLATE

  • OFN_ENABLETEMPLATEHANDLE

  • OFN_EXPLORER

  • OFN_EXTENSIONDIFFERENT

  • OFN_HIDEREADONLY

  • OFN_LONGNAMES - 實際上一律在 Windows Vista 或更新版本中開啟

  • OFN_NOLONGNAMES - 實際上一律在 Windows Vista 或更新版本中關閉

  • OFN_NONETWORKBUTTON - 有效地一律在 Windows Vista 或更新版本中開啟

  • OFN_READONLY

  • OFN_SHOWHELP

如需此結構的詳細資訊,請參閱 Windows SDK 中的 OPENFILENAME 結構。

CFileDialog::MakeProminent

將控件放在對話框中,使其與其他控件相較之下脫穎而出。

HRESULT MakeProminent(DWORD dwIDCtl);

參數

dwIDCtl
控件的標識碼。

備註

CFileDialog::OnButtonClicked

按兩下按鈕時呼叫。

virtual void OnButtonClicked(DWORD dwIDCtl);

參數

dwIDCtl
按鈕的標識碼。

備註

CFileDialog::OnCheckButtonToggled

核取或取消核取複選框時呼叫。

virtual void OnCheckButtonToggled(
    DWORD dwIDCtl,
    BOOL bChecked);

參數

dwIDCtl
複選框的識別碼。

bChecked
已核取或未核取。

備註

CFileDialog::OnControlActivating

啟用控件時呼叫。

virtual void OnControlActivating(DWORD dwIDCtl);

參數

dwIDCtl
控件的標識碼。

備註

CFileDialog::OnFileNameChange

如果您想要處理WM_NOTIFY CDN_SELCHANGE訊息,請覆寫此方法。

virtual void OnFileNameChange();

備註

當使用者在 [開啟] 或 [另存新檔] 對話框的檔案清單中選取新的檔案或資料夾時,系統會傳送CDN_SELCHANGE訊息。 如果您想要執行任何動作以回應此訊息,請覆寫此方法。

只有在開啟OFN_EXPLORER旗標建立對話框時,系統才會傳送此訊息。 如需通知的詳細資訊,請參閱 CDN_SELCHANGE。 如需OFN_EXPLORER旗標的相關信息,請參閱 OPENFILENAME 結構和 開啟和另存新檔對話方塊

CFileDialog::OnFileNameOK

只有在您想要提供輸入至通用檔案對話框的檔名自定義驗證時,才覆寫此函式。

virtual BOOL OnFileNameOK();

傳回值

如果檔名不是有效的檔名,則為 1;否則為 0。

備註

此函式可讓您拒絕任何應用程式特定原因的檔名。 一般而言,您不需要使用此函式,因為架構會提供預設的檔名驗證,並在輸入無效的檔名時顯示消息框。

如果傳回 1,使用者仍會顯示對話方塊以輸入另一個檔名。 如果傳回為 0,對話框程式就會關閉對話方塊。 目前保留其他非零傳回值,不應使用。

CFileDialog::OnFolderChange

覆寫此函式來處理WM_NOTIFYCDN_FOLDERCHANGE訊息。

virtual void OnFolderChange();

備註

當新的資料夾在 [開啟] 或 [另存新檔] 對話框中開啟時,就會傳送通知訊息。

只有在使用OFN_EXPLORER樣式建立對話框時,才會傳送通知。 如需通知的詳細資訊,請參閱 CDN_FOLDERCHANGE。 如需OFN_EXPLORER樣式的相關信息,請參閱 OPENFILENAME 結構和 開啟和另存新檔對話方塊

CFileDialog::OnInitDone

覆寫此函式來處理WM_NOTIFY CDN_INITDONE訊息。

virtual void OnInitDone();

備註

當系統完成在 [開啟] 或 [另存新檔] 對話框中排列控件以騰出空間供子對話框的控件使用時,系統就會傳送此通知訊息。

只有在使用OFN_EXPLORER樣式建立對話框時,系統才會傳送此專案。 如需通知的詳細資訊,請參閱 CDN_INITDONE。 如需OFN_EXPLORER樣式的相關信息,請參閱 OPENFILENAME 結構和 開啟和另存新檔對話方塊

注意

Windows Vista 或更新版本的樣式檔案對話框不支援此函式。 嘗試在 Windows Vista 或更新版本的樣式檔案對話框中使用此函式,將會擲回 CNotSupportedException

CFileDialog::OnItemSelected

選取容器專案時呼叫。

virtual void OnItemSelected(
    DWORD dwIDCtl,
    DWORD dwIDItem);

參數

dwIDCtl
容器控件的標識碼。

dwIDItem
項目的標識碼。

備註

CFileDialog::OnLBSelChangedNotify

每當清單框中目前的選取範圍即將變更時,就會呼叫此函式。

virtual void OnLBSelChangedNotify(
    UINT nIDBox,
    UINT iCurSel,
    UINT nCode);

參數

nIDBox
選取範圍所在的清單框或下拉式方塊的標識碼。

iCurSel
目前選取範圍的索引。

nCode
控制項通知程式代碼。 此參數必須具有下列其中一個值:

  • CD_LBSELCHANGE指定 iCurSel 是單一選取清單框中選取的專案。

  • CD_LBSELSUB 指定 在複選清單框中不再選取 iCurSel

  • CD_LBSELADD 指定 在多重選取清單框中選取 iCurSel

  • CD_LBSELNOITEMS 指定多重選取清單框中沒有選取專案。

備註

覆寫此函式,以在清單框中提供選取變更的自定義處理。 例如,您可以使用此函式來顯示使用者選取之每個檔案的訪問許可權或上次修改日期。

CFileDialog::OnShareViolation

覆寫此函式以提供共享違規的自定義處理。

virtual UINT OnShareViolation(LPCTSTR lpszPathName);

參數

lpszPathName
發生共用違規之檔案的路徑。

傳回值

下列其中一個值:

  • OFN_SHAREFALLTHROUGH 對話框會傳回檔名。

  • OFN_SHARENOWARN不需要採取進一步的動作。

  • OFN_SHAREWARN使用者會收到此錯誤的標準警告訊息。

備註

一般而言,您不需要使用此函式,因為架構會提供共用違規的默認檢查,並在發生共用違規時顯示消息框。

如果您要停用共享違規檢查,請使用位 OR 運算子來結合旗標OFN_SHAREAWARE與 m_ofn.Flags

CFileDialog::OnTypeChange

覆寫此函式來處理WM_NOTIFYCDN_TYPECHANGE訊息。

virtual void OnTypeChange();

備註

當使用者從 [開啟] 或 [另存新檔] 對話框中的檔類型清單中選取新的檔類型時,就會傳送通知訊息。

只有在使用OFN_EXPLORER樣式建立對話框時,才會傳送通知。 如需通知的詳細資訊,請參閱 CDN_TYPECHANGE。 如需OFN_EXPLORER樣式的相關信息,請參閱 OPENFILENAME 結構和 開啟和另存新檔對話方塊

CFileDialog::RemoveControlItem

從對話框中的容器控件中移除專案。

HRESULT RemoveControlItem(
    DWORD dwIDCtl,
    DWORD dwIDItem);

參數

dwIDCtl
要從中移除專案的容器控件標識碼。

dwIDItem
項目的標識碼。

備註

CFileDialog::SetCheckButtonState

設定對話框中複選框的目前狀態。

HRESULT SetCheckButtonState(
    DWORD dwIDCtl,
    BOOL bChecked);

參數

dwIDCtl
複選框的識別碼。

bChecked
複選框的狀態。 TRUE 表示已核取;FALSE 表示未核取。

備註

CFileDialog::SetControlItemState

設定對話框中找到之容器控件中專案的目前狀態。

HRESULT SetControlItemState(
    DWORD dwIDCtl,
    DWORD dwIDItem,
    CDCONTROLSTATEF dwState);

參數

dwIDCtl
容器控件的標識碼。

dwIDItem
項目的標識碼。

dwState
來自CDCONTROLSTATE列舉的一或多個值,表示控件的新狀態。

備註

CFileDialog::SetControlItemText

設定控件專案的文字。 例如,單選按鈕或功能表中專案隨附的文字。

HRESULT SetControlItemText(
    DWORD dwIDCtl,
    DWORD dwIDItem,
    const CString& strLabel);

參數

dwIDCtl
容器控件的標識碼。

dwIDItem
項目的標識碼。

strLabel
專案的文字。

備註

CFileDialog::SetControlLabel

設定與控件相關聯的文字,例如按鈕文字或編輯框標籤。

HRESULT SetControlLabel(
    DWORD dwIDCtl,
    const CString& strLabel);

參數

dwIDCtl
控件的標識碼。

strLabel
控制項名稱。

備註

CFileDialog::SetControlState

設定指定控制件的目前可見度和啟用狀態。

HRESULT SetControlState(
    DWORD dwIDCtl,
    CDCONTROLSTATEF dwState);

參數

dwIDCtl
控件的標識碼。

dwState
來自CDCONTROLSTATE列舉的一或多個值,表示控件的目前狀態。

備註

CFileDialog::SetControlText

呼叫這個方法,以在 [檔案總管] 樣式 的 [開啟 ] 或 [另存新 檔] 對話框中設定指定控件的文字。

void SetControlText(
    int nID,
    LPCSTR lpsz);

void SetControlText(
    int nID,
    const wchar_t *lpsz);

參數

nID
[in]要設定文字之控件的標識碼。

lpsz
[in]字串的指標,其中包含要為控件設定的文字。

備註

此函式的這兩個版本對於使用 Unicode 的應用程式都是有效的。 不過,只有具有 LPCSTR 類型的版本對使用 ANSI 的應用程式有效。

若要使用此方法,您必須使用 OFN_EXPLORER 樣式來建立對話方塊。 否則,函式將會失敗併產生判斷提示。

CFileDialog::SetDefExt

呼叫此函式,以設定 Explorer 樣式開啟或另存新檔通用對話框的預設擴展名。

void SetDefExt(LPCSTR lpsz);

參數

lpsz
字串的指標,包含用於對話框對象的預設延伸模組。 此字串不得包含句號 (.. )。

備註

對話框必須已使用OFN_EXPLORER樣式建立;否則,函式會失敗並顯示判斷提示。

CFileDialog::SetEditBoxText

設定編輯框控制件中的目前文字。

HRESULT SetEditBoxText(
    DWORD dwIDCtl,
    const CString& strText);

參數

dwIDCtl
編輯框的識別碼。

strText
文字值。

備註

CFileDialog::SetProperties

提供屬性儲存區,可定義要用於所儲存之項目的預設值。

BOOL SetProperties(LPCWSTR lpszPropList);

參數

lpszPropList
預先定義的屬性清單,以 ";" 分隔。 如需旗標的清單,請參閱 OPENFILENAMEFlags 區段。

備註

CFileDialog::SetSelectedControlItem

在單選按鈕群組或對話框中找到的下拉式方塊中,設定特定項目的選取狀態。

HRESULT SetSelectedControlItem(
    DWORD dwIDCtl,
    DWORD dwIDItem);

參數

dwIDCtl
容器控件的標識碼。

dwIDItem
使用者在控件中選取之專案的標識碼。

備註

CFileDialog::SetTemplate

設定 CFileDialog 物件的對話框範本

void SetTemplate(
    UINT nWin3ID,
    UINT nWin4ID);

void SetTemplate(
    LPCTSTR lpWin3ID,
    LPCTSTR lpWin4ID);

參數

nWin3ID
[in]包含非 Explorer CFileDialog 物件的樣本資源識別碼。 只有在 Windows NT 3.51 或OFN_EXPLORER樣式不存在時,才會使用此範本。

nWin4ID
[in]包含 Explorer CFileDialog 物件的樣本資源識別碼。 此範本僅適用於 Windows NT 4.0 和更新版本、Windows 95 和更新版本,或OFN_EXPLORER樣式存在時。

lpWin3ID
[in]包含非 Explorer CFileDialog 物件的樣本資源名稱。 只有在 Windows NT 3.51 或OFN_EXPLORER樣式不存在時,才會使用此範本。

lpWin4ID
[in]包含 Explorer CFileDialog 物件的樣本資源名稱。 此範本僅適用於 Windows NT 4.0 和更新版本、Windows 95 和更新版本,或OFN_EXPLORER樣式存在時。

備註

系統只會使用其中一個指定的範本。 系統會根據應用程式執行所在的OFN_EXPLORER樣式和作業系統,決定要使用的範本。 藉由同時指定非 Explorer 和 Explorer 樣式的範本,即可輕鬆地支援 Windows NT 3.51、Windows NT 4.0 和更新版本,以及 Windows 95 和更新版本。

注意

Windows Vista 或更新版本的樣式檔案對話框不支援此函式。 嘗試在 Windows Vista 或更新版本的樣式檔案對話框中使用此函式,將會擲回 CNotSupportedException。 替代方法是使用自定義對話框。 如需使用自定義 CFileDialog的詳細資訊,請參閱 IFileDialogCustomize

CFileDialog::StartVisualGroup

在對話框中宣告視覺群組。 後續對任何「新增」方法的呼叫會將這些專案新增至此群組。

HRESULT StartVisualGroup(
    DWORD dwIDCtl,
    const CString& strLabel);

參數

dwIDCtl
視覺效果群組的標識碼。

strLabel
組名。

備註

CFileDialog::UpdateOFNFromShellDialog

m_ofn根據內部物件的目前狀態,更新 CFileDialog 的數據結構

void UpdateOFNFromShellDialog();

備註

在 Windows Vista 之前的 Windows 版本中,成員 OPENFILENAME 數據結構會持續與 的狀態 CFileDialog同步處理。 m_ofn成員變數的任何變更都會直接影響對話框的狀態。 此外,對話框狀態的任何變更都會立即更新m_ofn成員變數。

在 Windows Vista 或更新版本中, m_ofn 數據結構不會自動更新。 若要保證成員變數中的數據 m_ofn 正確性,您應該先呼叫 函式, UpdateOFNFromShellDialog 再存取數據。 Windows 會在 IFileDialog::OnFileOK 處理期間自動呼叫此函式。

如需如何在 Windows Vista 或更新版本下使用 CFileDialog 類別的詳細資訊,請參閱 CFileDialog 類別

範例

本範例會先更新 CFileDialog ,再顯示它。 更新 m_ofn 成員變數之前,我們需要將其同步處理至對話框的目前狀態。

// Update the m_ofn variable
m_myFileDialogPtr->UpdateOFNFromShellDialog();

// Change the title
m_myFileDialogPtr->m_ofn.lpstrTitle = L"New Dialog Title";

// Apply the changes
m_myFileDialogPtr->ApplyOFNToShellDialog();

// Show the window
LRESULT result = m_myFileDialogPtr->DoModal();

另請參閱

CCommonDialog 類別
階層架構圖表