共用方式為


開啟並另存新檔對話方塊

注意

GetOpenFileName函式會在File 中使用範例中示範。

[從 Windows Vista 開始,通用專案對話方塊已取代 [開啟 ] 和 [另存 ] 通用對話方塊。 建議您使用通用專案對話方塊 API,而不是來自通用對話方塊程式庫的這些對話方塊。

[ 開啟 ] 對話方塊可讓使用者指定要開啟之檔案或檔案集的磁片磁碟機、目錄和名稱。 您可以藉由初始化OPENFILENAME結構,並將結構傳遞至GetOpenFileName函式,來建立並顯示 [開啟] 對話方塊。

[另 存新 檔] 對話方塊可讓使用者指定要儲存的磁片磁碟機、目錄和檔案名。 您可以初始化OPENFILENAME結構,並將結構傳遞至GetSaveFileName函式,以建立並顯示 [另存新檔] 對話方塊。

檔案總管樣式 的 [開啟 ] 和 [ 另存新 檔] 對話方塊提供類似 Windows 檔案總管的使用者介面功能。 不過,系統會針對必須與舊樣式使用者介面一致的應用程式,繼續支援舊樣式的 [開啟] 和[另存新檔] 對話方塊。

除了外觀的差異之外,Explorer 樣式和舊樣式對話方塊在自訂對話方塊的自訂範本和勾點程式使用上有所不同。 不過,[總管] 樣式和舊樣式對話方塊對於大部分基本作業都有相同的行為,例如指定檔案名篩選、驗證使用者的輸入,以及取得使用者指定的檔案名。 如需 Explorer 樣式和舊樣式對話方塊的詳細資訊,請參閱 開啟和另存新檔對話方塊自訂

下圖顯示一般檔案總管樣式的 [開啟 ] 對話方塊。

開啟檔案對話方塊

下圖顯示一般 Explorer 樣式的 [ 另存新 檔] 對話方塊。

儲存檔案對話方塊

如果使用者指定檔案名並按一下 [ 確定 ] 按鈕, GetOpenFileNameGetSaveFileName 會傳回 TRUE OPENFILENAME結構的lpstrFile成員所指向的緩衝區包含使用者所指定的完整路徑和檔案名。

如果使用者取消 [開啟 ] 或 [另存 新檔 ] 對話方塊或發生錯誤,函式會傳回 FALSE。 若要判斷錯誤的原因,請呼叫 CommDlgExtendedError 函 式來擷取擴充的錯誤值。 如果 lpstrFile 緩衝區太小而無法接收完整名稱, CommDlgExtendedError 會傳回 FNERR_BUFFERTOOSMALL ,而 lpstrFile 成員指向的前 2 個緩衝區位元組會設定為整數值,指定接收完整名稱所需的大小。

本節將討論下列主題。

檔案名和目錄

本節中的資訊同時適用于 [總管] 樣式和舊樣式的 [開啟 ] 和 [ 另存新 檔] 對話方塊。

呼叫GetOpenFileNameGetSaveFileName函式之前,OPENFILENAME結構的lpstrFile成員必須指向緩衝區,才能接收檔案名。 nMaxFile成員必須指定lpstrFile緩衝區的大小,以字元為單位。 對於 ANSI 函式而言,這是位元組數目,但對於 Unicode 函式而言,這是字元數。

如果使用者指定檔案名並按一下 [ 確定 ] 按鈕,對話方塊會將選取的磁片磁碟機、目錄和檔案名複製到 lpstrFile 緩衝區。 函式也會將 nFileOffsetnFileExtension 成員分別設定為緩衝區開頭到檔案名和副檔名的位移,以字元為單位。

若要只擷取檔案名和副檔名,請將 lpstrFileTitle 成員設定為指向緩衝區,並將 nMaxFileTitle 成員設定為緩衝區的大小,以字元為單位。 或者,您可以在呼叫GetFileTitle函式中傳遞lpstrFile緩衝區,以取得所選檔案的顯示名稱。 不過請注意, GetFileTitle 所傳回的檔案名只會包含副檔名,但前提是這是使用者用來顯示檔案名的喜好設定。

對話方塊會使用目前目錄作為呼叫進程的初始目錄,用來顯示檔案和目錄。 使用 GetCurrentDirectorySetCurrentDirectory 函式來取得和變更進程的目前目錄。 若要指定不同的初始目錄而不變更您目前的目錄,請使用 lpstrInitialDir 成員來指定目錄的名稱。 當使用者選取不同的磁片磁碟機或目錄時,對話方塊會自動變更您目前的目錄。 若要防止對話方塊變更目前的目錄,請設定 OFN_NOCHANGEDIR 旗標。 此旗標不會防止使用者變更目錄來尋找檔案。

若要指定預設副檔名,請使用 lpstrDefExt 成員。 如果使用者指定沒有副檔名的檔案名,對話方塊會新增您的預設副檔名。 如果您指定預設副檔名,而且使用者指定副檔名不同的檔案名,對話方塊會設定 OFN_EXTENSIONDIFFERENT 旗標。

若要讓使用者從目錄中選取多個檔案,請設定 OFN_ALLOWMULTISELECT 旗標。 為了與較舊的應用程式相容,預設多重選取對話方塊會使用舊樣式的使用者介面。 若要顯示 [總管] 樣式的多重選取對話方塊,您也必須設定 OFN_EXPLORER 旗標。

如果使用者選取多個檔案, lpstrFile 成員所指向的緩衝區會傳回目前目錄的路徑,後面接著所選檔案的檔案名。 nFileOffset成員是第一個檔案名的位移,而且不會使用nFileExtension成員。 下表描述傳回多個檔案名的 Explorer 樣式和舊樣式對話方塊之間的差異。

對話方塊樣式 Description
Explorer 樣式對話方塊 目錄和檔案名字串會以 Null 分隔,並在姓氏後面加上額外的 Null 字元。 此格式可讓 [總管] 樣式對話方塊傳回包含空格的長檔名。
舊樣式對話方塊 目錄和檔案名字串會以空格分隔。 對於具有空格的檔案名,函式會使用簡短的檔案名。

 

您可以使用 FindFirstFile 函式,在長和短檔案名之間轉換。

如果您指定 OFN_ALLOWMULTISELECT 且使用者只選取一個檔案, 則 lpstrFile 字串在路徑和檔案名之間沒有分隔符號。

篩選器

本節中的資訊同時適用于 [總管] 樣式和舊樣式 [開啟 ] 和 [ 另存新 檔] 對話方塊。

您可以提供檔案名篩選,以協助使用者限制對話方塊顯示的檔案名。 檔案名篩選是由一對以 Null 終止的字串、描述和模式所組成,其中一個串連至另一個字串。 對話方塊會顯示描述,讓使用者挑選要使用的篩選;它會使用 模式來選取要顯示的檔案。

若要指定篩選,請將OPENFILENAME結構的lpstrFilter成員設定為指向包含篩選字串組陣列的緩衝區。 陣列中的最後一個字串後面必須加上額外的 Null 字元。

模式字串可以是有效檔案名字元和星號 (*) 的組合。 星號是萬用字元,代表有效檔案名字元的任何組合。 對話方塊只會顯示符合模式的檔案。 若要指定相同描述的多個模式,您必須使用分號 (;) 來分隔模式。 請注意,模式字串中的空白字元可能會產生非預期的結果。

下列程式碼片段會指定兩個篩選。 具有「來源」描述的篩選有兩種模式。 如果使用者選取此篩選準則,對話方塊只會顯示具有 的檔案。C 和 。CXX 延伸模組。 請注意,在 C 程式設計語言中,以雙引號括住的字串會以 Null 結尾。

OPENFILENAME ofn;       // common dialog box structure

ofn.lpstrFilter = "Source\0*.C;*.CXX\0All\0*.*\0"
ofn.nFilterIndex = 1;

OPENFILENAME結構的nFilterIndex成員會指定索引,指出最初使用哪一個篩選對話方塊。 緩衝區中的第一個篩選準則具有索引 1、第二個 2,依此類排列。 如果使用者在使用對話方塊時變更篩選準則, nFilterIndex 成員會在傳回時設定為所選篩選的索引。

您可以將 lpstrCustomFilter 成員設定為包含單一篩選的緩衝區位址,以及將 nMaxCustFilter 成員設定為緩衝區的大小,以字元或位元組為單位來建立自訂篩選。 對話方塊一律會將自訂篩選放在篩選清單的開頭,並在傳回時,一律使用使用者所選篩選的模式來更新篩選的模式部分。

針對 [總管樣式] 對話方塊,如果使用者選取不同的篩選,預設延伸模組可能會變更。 如果使用者選取第一個模式為表單 *的篩選準則。xxx (也就是說,延伸模組不包含萬用字元) ,對話方塊會使用 xxx 做為預設副檔名。 只有在您在OPENFILENAME結構的lpstrDefExt成員中指定預設延伸模組時,才會發生此情況。 例如,如果使用者選取 「Source\0*」。C;*。CXX\0「 篩選準則,預設延伸模組會變更為 」C」。 不過,如果您已將篩選定義為 「Source\0*」。C*\0「,預設延伸模組不會變更,因為延伸模組包含萬用字元。

CDN_INCLUDEITEM通知訊息提供另一種方式來篩選對話方塊顯示的名稱。 若要使用此訊息,請在建立對話方塊時,提供OFNHookProc攔截程式,並在OPENFILENAME結構中指定OFN_ENABLEINCLUDENOTIFY旗標。 每次使用者開啟資料夾時,對話方塊都會針對新開啟資料夾中的每個專案傳送 CDN_INCLUDEITEM 通知給您的攔截程式。 攔截程式的傳回值會指出對話方塊是否應該在資料夾的專案清單中顯示專案。

檔案和目錄驗證

除了另有說明,本節中的資訊也適用于 [總管] 樣式和舊樣式的 [開啟 ] 和 [ 另存新 檔] 對話方塊。

對話方塊會自動驗證使用者輸入的檔案名,以確保名稱只包含有效的字元。 若要覆寫檔案名字元驗證,請設定 OFN_NOVALIDATE 旗標。

若要強制對話方塊確認使用者指定了現有檔案的名稱,請設定 OFN_FILEMUSTEXIST 旗標。 若要強制驗證指定的路徑存在,請設定 OFN_PATHMUSTEXIST 旗標。 如果您設定 OFN_CREATEPROMPT 旗標,對話方塊會提示使用者建立不存在的檔案。 如果設定此旗標,且使用者選擇建立新檔案,對話方塊會關閉,且函式會傳回指定的名稱。 否則,對話方塊會保持開啟狀態。

使用 [ 另存新 檔] 對話方塊時,您可以指示對話方塊提示使用者設定 OFN_OVERWRITEPROMPT 旗標來覆寫現有檔案的許可權。

根據預設,對話方塊會建立長度為零的測試檔案,以判斷是否可以在選取的目錄中建立新檔案。 若要防止建立此測試檔案,請設定 OFN_NOTESTFILECREATE 旗標。

如果啟用攔截程式,對話方塊會在使用者指定的檔案名發生網路共用違規時通知您的攔截程式。 如果您設定 OFN_EXPLORER 旗標,對話方塊會將 CDN_SHAREVIOLATION 訊息傳送至攔截程式。 如果您未設定 OFN_EXPLORER,對話方塊會將 SHAREVISTRING 已註冊的訊息傳送至勾點程式。 若要防止對話方塊傳送任何共用違規通知,請設定 OFN_SHAREAWARE 旗標。

如果使用者選取唯讀核取方塊,對話方塊會在傳回時設定 OFN_READONLY 旗標。 若要隱藏 [ 開啟為唯讀] 核取方塊,請設定 OFN_HIDEREADONLY 旗標。 若要防止對話方塊傳回具有唯讀屬性的現有檔案名,請設定 OFN_NOREADONLYRETURN 旗標。

若要防止對話方塊取值連結檔案,請設定 OFN_NODEREFERENCELINKS 值。 在此情況下,對話方塊會傳回連結檔的名稱,而不是連結檔所參考的檔案名。

開啟並另存新檔對話方塊自訂

您可以藉由提供勾點程式、自訂範本或兩者來自訂[開啟] 或[另存新檔] 對話方塊。 不過,對話方塊的 Explorer 樣式和舊樣式版本會因自訂範本和勾點程式而有所不同。

如需自訂總管樣式對話方塊的詳細資訊,請參閱 Explorer 樣式勾點程式Explorer 樣式自訂範本Explorer 樣式控制項識別碼。 如需自訂舊樣式對話方塊的相關資訊,請參閱 自訂Old-Style對話方塊

下表摘要說明兩種樣式之間的差異。

自訂 Description
Explorer 樣式勾點程式 攔截程式會接收從通用對話方塊傳送的通知訊息,以及指定子對話方塊範本所定義之任何其他控制項的訊息。 攔截程式不會接收預設對話方塊之標準控制項的訊息。
檔案總管樣式自訂範本 系統會使用自訂範本來建立子對話方塊。 範本可以定義其他控制項,並可指定標準控制項叢集的位置。 自訂範本不會取代預設範本。
舊樣式勾點程式 攔截程式會接收傳送至對話方塊的所有訊息,包括標準控制項和任何自訂控制項的訊息。 攔截程式也會接收從一般對話方塊傳送的已註冊訊息。
舊樣式自訂範本 自訂範本會取代預設範本。 修改 Fileopen.dlg 檔案中指定的預設範本,以建立自訂範本。

 

Explorer 樣式和舊樣式對話方塊的預設標題為 「開啟」或「另存新檔」。若要變更標題,請在OPENFILENAME結構的lpstrTitle成員中指定新的標題。

使用者的 HKEY_CURRENT_USER 登錄區可以包含值,這些值可自訂 [總管] 樣式的 [開啟 ] 和 [ 另存新 檔] 對話方塊的內容。 這些登錄專案只會影響與登錄區相關聯之使用者顯示的對話方塊。

若要隱藏 [總管] 樣式的 [開啟 ] 和 [另存 檔] 對話方塊的功能,系統管理員可以在此子機碼下設定下表中的值:

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Comdlg32
值名稱 意義
NoPlacesBar 1 隱藏放置列。
NoFileMRU 1 隱藏 [最近使用的 (MRU) 清單。
NoBackButton 1 隱藏 [ 上一頁 ] 按鈕。

 

Places列的內容取決於下列子機碼的內容:

HKEY_CURRENT_USER
   Software
      Microsoft
         Windows
            CurrentVersion
               Policies
                  Comdlg32
                     Placesbar

目前,此索引鍵下只能有五個專案,而值/名稱索引是以零起始。 專案的名稱應該是 Place0、Place1、Place2、Place3 和 Place4。 專案的值可以是 REG_DWORDREG_SZREG_EXPAND_SZ 值,以識別要包含在位置列中的位置。

值類型 意義
REG_DWORD 識別資料夾的 CSIDL 值。 如需 CSIDL 值的清單,請參閱 CSIDL 值
REG_SZREG_EXPAND_SZ 指定有效路徑的 Null 終止字串。

 

Explorer-Style勾點程式

您可以藉由提供勾點程式、自訂範本或兩者,來自訂檔案總管樣式的[開啟] 或 [另存新檔] 對話方塊。 如果您提供 Explorer 樣式對話方塊的勾點程式,系統會建立對話方塊,這是預設對話方塊的子系。 攔截程式會作為子對話方塊的對話方塊程式。 這個子對話方塊是以自訂範本為基礎,如果沒有提供,則為預設範本。 如需詳細資訊,請參閱 Explorer 樣式自訂範本

若要啟用 Explorer 樣式的 [開啟] 或[另存新檔] 對話方塊的攔截程式,請在建立對話方塊時使用OPENFILENAME結構。 在Flags成員中設定OFN_ENABLEHOOKOFN_EXPLORER旗標,並在lpfnHook成員中指定OFNHookProc攔截程式的位址。 如果您提供攔截程式並省略 OFN_EXPLORER 旗標,則必須使用 OFNHookProcOldStyle 勾點程式,您將取得舊樣式的使用者介面。 如需詳細資訊,請參閱 自訂Old-Style對話方塊

當對話方塊開啟時,Explorer 樣式的攔截程式會收到各種訊息。 這些選項包括:

  • WM_INITDIALOG訊息和其他標準對話方塊訊息,例如WM_CTLCOLORDLG控制項色彩訊息。
  • 一組 WM_NOTIFY 通知訊息,指出使用者或其他對話方塊事件所採取的動作。
  • 指定子對話方塊範本所定義之任何其他控制項的訊息。

此外,還有一組訊息,您可以傳送至 Explorer 樣式對話方塊,以取得資訊或控制對話方塊的行為和外觀。

如果您提供 Explorer 樣式對話方塊的勾點程式,預設對話方塊程式會在預設對話方塊處理其 WM_INITDIALOG 訊息時,建立子對話方塊。 攔截程式會作為子對話方塊的對話方塊程式。 此時,攔截程式會收到自己的 WM_INITDIALOG 訊息,並將 lParam 參數設定為用來初始化對話方塊之 OPENFILENAME 結構的位址。 在子對話方塊完成處理自己的 WM_INITDIALOG 訊息之後,預設對話方塊程式會視需要移動標準控制項,以空間容納子對話方塊的任何其他控制項。 預設對話方塊程式接著會將 CDN_INITDONE 通知訊息傳送至攔截程式。

攔截程式會接收 WM_NOTIFY 通知訊息,指出對話方塊中使用者所採取的動作。 您可以使用其中一些訊息來控制對話方塊的行為。 例如,當使用者選擇檔案名並按一下 [確定] 按鈕時,攔截程式會收到CDN_FILEOK訊息。 為了回應此訊息,攔截程式可以使用 SetWindowLong 函式來拒絕選取的名稱,並強制對話方塊保持開啟狀態。

每個WM_NOTIFY訊息的lParam參數都是定義動作之 OFNOTIFY 或 OFNOTIFYEX結構的指標。 這個結構的標頭中的程式 代碼 成員包含下列其中一個通知訊息。

訊息 意義
CDN_FILEOK 使用者按一下 [ 確定 ] 按鈕;對話方塊即將關閉。
CDN_FOLDERCHANGE 使用者開啟了新的資料夾或目錄。
CDN_HELP 使用者已按一下 [ 說明 ] 按鈕。
CDN_INCLUDEITEM 判斷是否應該顯示專案。 當使用者開啟新的資料夾或目錄時,系統會針對資料夾或目錄中的每個專案傳送此通知。 只有在設定 OFN_ENABLEINCLUDENOTIFY 旗標時,系統才會傳送此通知。
CDN_INITDONE 系統已完成對話方塊初始化,而且對話方塊已完成處理 WM_INITDIALOG 訊息。 此外,系統已完成在通用對話方塊中排列控制項,以在有任何) 時,讓子對話方塊控制項的空間 (。
CDN_SELCHANGE 使用者已從檔案清單中選取新的檔案或資料夾。
CDN_SHAREVIOLATION 常見的對話方塊在即將傳回的檔案上遇到共用違規。
CDN_TYPECHANGE 使用者從檔案類型清單中選取新的檔案類型。

 

這些WM_NOTIFY訊息取代了舊版 [開啟] 和 [另存新檔] 對話方塊所使用的FILEOKSTRINGLBSELCHSTRINGSHAREVISTRINGHELPMSGSTRING已註冊的訊息。 不過,如果WM_NOTIFY處理不使用SetWindowLong來設定非 DWL_MSGRESULT零,攔截程式也會在WM_NOTIFY訊息之後收到已取代訊息。

若要擷取對話方塊狀態的相關資訊,或控制對話方塊的行為和外觀,攔截程式可以將下列訊息傳送至對話方塊。

訊息 意義
CDM_GETFILEPATH 擷取所選取檔案的路徑和檔案名。
CDM_GETFOLDERIDLIST 擷取對應至對話方塊已開啟之目前資料夾的專案識別碼清單。 如需專案識別碼清單的詳細資訊,請參閱 Shell 命名空間簡介
CDM_GETFOLDERPATH 擷取對話方塊目前資料夾或目錄的路徑。
CDM_GETSPEC 擷取檔案名 (不包含目前在對話方塊中選取之檔案的路徑) 。
CDM_HIDECONTROL 隱藏指定的控制項。
CDM_SETCONTROLTEXT 設定指定控制項中的文字。
CDM_SETDEFEXT 設定對話方塊的預設副檔名。

 

Explorer-Style自訂範本

若要定義 Explorer 樣式的 [開啟] 或[另存新檔] 對話方塊的其他控制項,請使用OPENFILENAME結構來指定包含其他控制項之子對話方塊的範本。 如果您的子對話範本是應用程式或動態連結程式庫中的資源,請在Flags成員中設定OFN_ENABLETEMPLATE旗標,並使用 結構的hInstancelpTemplateName成員來識別模組和資源名稱。 如果範本已在記憶體中,請設定 OFN_ENABLETEMPLATEHANDLE 旗標,並使用 hInstance 成員來識別包含範本的記憶體物件。 提供 Explorer 樣式對話方塊的子對話方塊範本時,您也必須設定 OFN_EXPLORER 旗標;否則,系統會假設您提供舊樣式對話方塊的取代範本。 一般而言,如果您提供其他控制項,您也必須提供 Explorer 樣式的勾點程式 來處理新控制項的訊息。

您可以在執行任何其他範本時建立子對話方塊範本,但您必須指定 WS_CHILDWS_CLIPSIBLINGS 樣式,而且應該指定 DS_3DLOOKDS_CONTROL 樣式。 系統需要 WS_CHILD 樣式,因為您的範本會定義預設 [ 開啟 ] 或 [ 另存新 檔] 對話方塊的子對話方塊。 WS_CLIPSIBLINGS樣式可確保子對話方塊不會繪製在預設對話方塊中的任何控制項上。 DS_3DLOOK樣式可確保子對話方塊中控制項的外觀與預設對話方塊中的控制項一致。 DS_CONTROL樣式可確保使用者可以使用 TAB 和其他導覽鍵,在自訂對話方塊中的所有控制項或自訂之間移動。

若要讓新控制項有空間,系統會依自訂對話方塊的寬度和高度展開預設對話方塊。 根據預設,自訂對話方塊中的所有控制項都位於預設對話方塊中的控制項下方。 不過,您可以在自訂對話方塊範本中包含靜態文字控制項,並將 stc32的控制項識別碼值指派給它,以覆寫此預設位置。 (這個值是在 Dlgs.h 標頭檔.) 中定義。在此情況下,系統會使用 控制項做為參考點,以判斷新控制項的位置。 stc32控制項上方和左邊的所有新控制項都位於預設對話方塊中控制項的上方和左邊的相同數量。 stc32控制項右邊和下方的新控制項位於預設控制項的右邊和下方。 一般而言,每個新控制項都會定位,使其與預設控制項的相對位置與 stc32 控制項相同。 若要讓這些新控制項有空間,系統會視需要將空間新增至預設對話方塊的左、右、下和頂端。

系統需要攔截程式來處理所有用於自訂對話方塊的訊息,因此會將相同的視窗訊息傳送至攔截程式,如同任何其他對話方塊程式一樣。 例如,當使用者在自訂對話方塊中按一下按鈕控制項時,攔截程式會收到 WM_COMMAND 訊息。 攔截程式負責初始化這些控制項,並在關閉對話方塊時從控制項擷取值。 請注意,當攔截程式收到 WM_INITDIALOG 訊息時,系統尚未將控制項移至其最終位置。

預設對話方塊程式會處理預設對話方塊中所有控制項的訊息,但攔截程式會接收這些控制項上使用者動作的通知訊息,如 Explorer-Style Hook Procedures中所述。

Explorer-Style控制項識別碼

Windows 軟體發展工具組 (SDK) 提供舊樣式對話方塊的預設對話方塊範本,但不包含 Explorer 樣式對話方塊的預設範本。 這是因為 Explorer 樣式對話方塊可讓您新增自己的控制項,但不支援修改標準控制項的範本。 不過,在某些情況下,您可能需要知道預設範本中使用的控制項識別碼。 例如, CDM_HIDECONTROLCDM_SETCONTROLTEXT 訊息需要控制項識別碼。

下表顯示在 [總管] 樣式的 [開啟 ] 和 [ 另存新 檔] 對話方塊中的標準控制項識別碼。 識別碼是 Dlgs.h 和 Winuser.h 中定義的常數。

控制項識別碼 控制項描述
chx1 唯讀核取方塊
cmb1 顯示檔案類型篩選清單的下拉式方塊
stc2 cmb1下拉式方塊的標籤
cmb2 顯示目前磁片磁碟機或資料夾的下拉式方塊,並允許使用者選取要開啟的磁片磁碟機或資料夾
stc4 cmb2下拉式方塊的標籤
cmb13 顯示目前檔案名的下拉式方塊,可讓使用者輸入要開啟的檔案名,然後選取最近開啟或儲存的檔案。 這適用于舊版的 Explorer 相容應用程式,不含勾點或對話方塊範本。 與 edt1比較。
edt1 顯示目前檔案名的編輯控制項,或允許使用者輸入要開啟的檔案名。 與 cmb13比較。
stc3 cmb13下拉式方塊和 edt1 編輯控制項的標籤
lst1 顯示目前磁片磁碟機或資料夾內容的清單方塊
stc1 lst1清單方塊的標籤
IDOK [ 確定 ] 命令按鈕 (按鈕)
IDCANCEL [取消] 命令按鈕 (按鈕)
pshHelp [ 說明 ] 命令按鈕 (按鈕)

 

自訂Old-Style對話方塊

您可以藉由提供OFNHookProcOldStyle攔截程式來自訂舊樣式的 [開啟] 或[另存新檔] 對話方塊,以接收用於預設對話方塊程式的訊息或通知。 您也可以提供自訂範本來取代預設範本。 與舊樣式對話方塊搭配使用的勾點程式和範本,類似于與其他通用對話方塊搭配使用的程式。 如需詳細資訊,請參閱常見對話方塊和自訂範本的勾點程式

若要啟用舊樣式 的 [開啟 ] 或 [ 另存 新檔] 對話方塊的勾點程式,請在建立對話方塊時使用 OPENFILENAME 結構。 在Flags成員中設定OFN_ENABLEHOOK旗標,並在lpfnHook成員中指定OFNHookProcOldStyle攔截程式的位址。 對話方塊程式會將 WM_INITDIALOG 訊息傳送至攔截程式,並將 Param 參數設定為用來初始化對話方塊之 OPENFILENAME 結構的位址。

您可以使用 OPENFILENAME 結構來指定 [ 開啟 ] 或 [ 存新檔] 對話方塊的自訂範本,以取代預設範本。 如果您的自訂範本是應用程式或動態連結程式庫中的資源,請在Flags成員中設定OFN_ENABLETEMPLATE旗標,並使用 結構的hInstancelpTemplateName成員來識別模組和資源名稱。 如果您的自訂範本已經在記憶體中,請設定 OFN_ENABLETEMPLATEHANDLE 旗標 並使用 hInstance 成員來識別包含範本的記憶體物件。 修改 Fileopen.dlg 檔案中指定的預設範本,以建立自訂範本。 預設 [尋找和取代] 對話方塊範本中使用的控制項識別碼定義于 Dlgs.h 檔案中。

根據預設, GetOpenFileNameGetSaveFileName 函式會顯示 Explorer 樣式對話方塊。 如果您想要顯示舊樣式對話方塊,您必須提供OFNHookProcOldStyle勾點程式,並確定未在 OPENFILENAME結構的Flags成員中設定OFN_EXPLORER旗標。

如果您設定 OFN_EXPLORER 旗標,系統會將勾點程式或自訂範本視為 Explorer 樣式自訂。 如需自訂 Explorer 樣式對話方塊的詳細資訊,請參閱 Explorer-Style 自訂範本

另請參閱