語法
(
BOOL bOpenFileDialog,
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY |OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL
);
參數
bOpenFileDialog
TRUE則顯示打開檔案對話框,FALSE則顯示保存檔案對話框。
lpszDefExt
指定默認的檔案擴展名。
lpszFileName
指定默認的檔案名稱。
dwFlags
指明一些特定風格。
lpszFilter
是最重要的一個參數,它指明可供選擇的檔案類型和相應的擴展名。
pParentWnd
為父視窗指針。
簡介
可以用構造函式提供的方式使用CFileDialog,也可以從CFileDialog派生出自己的對話類並編寫一個構造函式來適應你的需要。每種情況下,對話框都與標準MFC對話框一樣工作。因為它們都是CCommonDialog類的派生類。
要使用CFileDialog,先用CFileDialog構造函式構造一個對象,當創建了一個對話框後,可以設定或修改m_ofn結構中的任何值,以初始化對話框控制項的值或狀態。m_ofn結構是OPENFILENAME類型的。要了解更多信息,可參閱在線上文檔“Win32 SDK”中的OPENFILENAME結構。
初始化對話框控制項後,調用DoModal成員函式顯示對話框並使用戶輸入路徑和檔案。DoModal返回不論是用戶選擇了OK(IDOK)還是取消(IDCANCEL)按鈕。
當DoModal返回IDOK,可以使用某一個CFileDIalog的公共成員函式獲取用戶輸入的信息。
CFileDIalog包含許多保護成員,使你可以處理常用的共享衝突、檔案名稱合法性檢查、列表框改變通知。這些保護成員對許多套用來說用處不大,因為預設處理是自動的。對這些函式來說,訊息映射入口是不必要的,因為它們是標準虛函式。
可以使用Windows CommDlgExtendError函式判斷在初始化對話框時是否是發生了錯誤,並獲取關於錯誤的更多信息。
析構一個CFileDialog對象是自動,無須調用CDialog::EndDialog。
要使用戶選用多個檔案,可在調用DoModal之前設定OFN_ALLOWMULTISELECT標誌。你應提供檔案名稱緩衝區來放置返回的多個檔案名稱的列表,這通過用一個分配了的緩衝區指針替換m_ofn.lpstrFile來實現,要在創建了CFileDialog之後調用DoModal之前進行此操作。另外,必須用m_ofn.lpstrFile指向的緩衝區位元組數來設定m_ofn.nMaxFile。
CFileDialog依賴於Windows3.1及以後版本中的COMMDLG.DLL。
如果從CFileDialog中派生出一個新類,可用訊息映射處理。要擴展訊息處理,從CWnd中派生一個類,向新類中加入一個訊息映射並為新訊息提供成員函式,無須提供一個鉤子函式來定製對話框。
要定製對話框,從CFileDialog中派生一個對象,提供一個定製對話模板,從擴展控制項中加入一個訊息映射,處理通知訊息。任意未處理的訊息將傳遞給基類。
無須定製鉤子函式。
#include <afxdlgs.h>
CFileDialog類的成員
繼承體系
CObject
└CCmdTarget
└CWnd
└CDialog
└CCommonDialog
└CFileDialog
數據成員
m_ofn Windows OPENFILENAME結構,提供對基本檔案對話框參數的訪問 |
構造函式
CFileDialog構造一個CFileDialog對象操作
DoModal顯示對話框並使用戶可以進行選擇
GetPathName返回選定檔案的完整路徑
GetFileName返回選定檔案的檔案名稱
GetFileExt返回選定檔案的擴展檔案名稱
GetFileTitle返回選定檔案的標題
GetNextPathName返回下一個選定檔案的完整路徑
GetReadOnlyPref返回選定檔案的唯讀狀態
GetStartPosition返回檔案名稱列表的第一個元素位置
可覆蓋的函式
OnShareViolation發生共享衝突時調用
OnFileNameOK確認鍵入對話框中的檔案名稱
OnLBSelChangedNotify當列表框選擇改變時調用
OnInitDone處理WM_NOTIFY CDN_INITDONE訊息
OnFileNameChange處理WM_NOTIFY CDN_SELCHANGE訊息
OnFolderChange處理WM_NOTIFY CDN_FOLDERCHANGE訊息
OnTypeChange處理WM_NOTIFY CDN_TYPECHANGE訊息
檔案選擇對話框的使用:首先構造一個對象並提供相應的參數,構造函式原型如下:
CFileDialog::CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );
參數意義如下:
bOpenFileDialog 為TRUE則顯示打開對話框,為FALSE則顯示保存對話檔案對話框。
lpszDefExt 指定默認的檔案擴展名。
lpszFileName 指定默認的檔案名稱。
dwFlags 指明一些特定風格。
lpszFilter 是最重要的一個參數,它指明可供選擇的檔案類型和相應的擴展名。參數格式如:
"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";檔案類型說明和擴展名間用 | 分隔,同種類型檔案的擴展名間可以用 ; 分割,每種檔案類型間用 | 分隔,末尾用 || 指明。
pParentWnd 為父視窗指針。
成員函式
創建檔案對話框可以使用DoModal(),在返回後可以利用下面的函式得到用戶選擇:
CString CFileDialog::GetPathName( ) 得到完整的檔案名稱,包括目錄名和擴展名如:c:\ test\ test1.txt
CString CFileDialog::GetFileName( ) 得到完整的檔案名稱,包括擴展名如:test1.txt
CString CFileDialog::GetFileExt( ) 得到完整的檔案擴展名,如:txt
CString CFileDialog::GetFileTitle ( ) 得到完整的檔案名稱,不包括目錄名和擴展名如:test1
POSITION CFileDialog::GetStartPosition( ) 對於選擇了多個檔案的情況得到第一個檔案位置。
CString CFileDialog::GetNextPathName( POSITION& pos ) 對於選擇了多個檔案的情況得到下一個檔案位置,並同時返回當前檔案名稱。但必須已經調用過POSITION CFileDialog::GetStartPosition( )來得到最初的POSITION變數。
例如
{
CString
FilePathName;
CFileDialog dlg(TRUE);///TRUE為OPEN對話框,FALSE為SAVE AS對話框
if(dlg.DoModal()==IDOK)
FilePathName=dlg.GetPathName();
}
相關信息:CFileDialog 用於取檔案名稱的幾個成員函式:
假如選擇的檔案是C:WINDOWSTEST.EXE
則:
(1)GetPathName();取檔案名稱全稱,包括完整路徑。取回C:\WINDOWS\TEST.EXE
(2)GetFileName();取檔案全名:TEST.EXE
(3)GetFileTitle();取回TEST
(4)GetFileExt();取擴展名EXE
補充: 在控制台下使用這個類需要設定在靜態庫中使用MFC,然後構造 AfxSetResourceHandle(GetModuleHandle(NULL));
相關頭檔案 #include <Afxdlgs.h>
例子代碼
例:
int main()
{
AfxSetResourceHandle(GetModuleHandle(NULL));
CFileDialog filedlg(TRUE);
if(IDOK==filedlg.DoModal())
{
...
}
return 0;
}
風格詳解
dwFlags
Flags
A set of bit flags you can use to initialize the dialog box. When the dialog box returns, it sets these flags to indicate the user's input. This member can be a combination of the following flags.
OFN_ALLOWMULTISELECT
Specifies that the File Name list box allows multiple selections. If you also set the OFN_EXPLORER flag, the dialog box uses the Explorer-style user interface; otherwise, it uses the old-style user interface.
If the user selects more than one file, the lpstrFile buffer returns the path to the current directory followed by the file names of the selected files. The nFileOffset member is the offset, in bytes or characters, to the first file name, and the nFileExtension member is not used. For Explorer-style dialog boxes, the directory and file name strings are NULL separated, with an extra NULL character after the last file name. This format enables the Explorer-style dialog boxes to return long file names that include spaces. For old-style dialog boxes, the directory and file name strings are separated by spaces and the function uses short file names for file names with spaces. You can use the FindFirstFile function to convert between long and short file names.
If you specify a custom template for an old-style dialog box, the definition of the File Name list box must contain the LBS_EXTENDEDSEL value.
OFN_CREATEPROMPT
If the user specifies a file that does not exist, this flag causes the dialog box to prompt the user for permission to create the file. If the user chooses to create the file, the dialog box closes and the function returns the specified name; otherwise, the dialog box remains open. If you use this flag with the OFN_ALLOWMULTISELECT flag, the dialog box allows the user to specify only one nonexistent file.
OFN_DONTADDTORECENT
Windows 2000/XP: Prevents the system from adding a link to the selected file in the file system directory that contains the user's most recently used documents. To retrieve the location of this directory, call the SHGetSpecialFolderLocation function with the CSIDL_RECENT flag.
OFN_ENABLEHOOK
Enables the hook function specified in the lpfnHook member.
OFN_ENABLEINCLUDENOTIFY
Windows 2000/XP: Causes the dialog box to send CDN_INCLUDEITEM notification messages to your OFNHookProc hook procedure when the user opens a folder. The dialog box sends a notification for each item in the newly opened folder. These messages enable you to control which items the dialog box displays in the folder's item list.
OFN_ENABLESIZING
Windows 2000/XP, Windows 98/Me: Enables the Explorer-style dialog box to be resized using either the mouse or the keyboard. By default, the Explorer-style Open and Save As dialog boxes allow the dialog box to be resized regardless of whether this flag is set. This flag is necessary only if you provide a hook procedure or custom template. The old-style dialog box does not permit resizing.
OFN_ENABLETEMPLATE
Indicates that the lpTemplateName member is a pointer to the name of a dialog template resource in the module identified by the hInstance member. If the OFN_EXPLORER flag is set, the system uses the specified template to create a dialog box that is a child of the default Explorer-style dialog box. If the OFN_EXPLORER flag is not set, the system uses the template to create an old-style dialog box that replaces the default dialog box.
OFN_ENABLETEMPLATEHANDLE
Indicates that the hInstance member identifies a data block that contains a preloaded dialog box template. The system ignores lpTemplateName if this flag is specified. If the OFN_EXPLORER flag is set, the system uses the specified template to create a dialog box that is a child of the default Explorer-style dialog box. If the OFN_EXPLORER flag is not set, the system uses the template to create an old-style dialog box that replaces the default dialog box.
OFN_EXPLORER
Indicates that any customizations made to the Open or Save As dialog box use the new Explorer-style customization methods. For more information, see Explorer-Style Hook Procedures and Explorer-Style Custom Templates.
By default, the Open and Save As dialog boxes use the Explorer-style user interface regardless of whether this flag is set. This flag is necessary only if you provide a hook procedure or custom template, or set the OFN_ALLOWMULTISELECT flag.
If you want the old-style user interface, omit the OFN_EXPLORER flag and provide a replacement old-style template or hook procedure. If you want the old style but do not need a custom template or hook procedure, simply provide a hook procedure that always returns FALSE.
OFN_EXTENSIONDIFFERENT
Specifies that the user typed a file name extension that differs from the extension specified by lpstrDefExt. The function does not use this flag if lpstrDefExt is NULL.
OFN_FILEMUSTEXIST
Specifies that the user can type only names of existing files in the File Name entry field. If this flag is specified and the user enters an invalid name, the dialog box procedure displays a warning in a message box. If this flag is specified, the OFN_PATHMUSTEXIST flag is also used. This flag can be used in an Open dialog box. It cannot be used with a Save As dialog box.
OFN_FORCESHOWHIDDEN
Windows 2000/XP: Forces the showing of system and hidden files, thus overriding the user setting to show or not show hidden files. However, a file that is marked both system and hidden is not shown.
OFN_HIDEREADONLY
Hides the Read Only check box.
OFN_LONGNAMES
For old-style dialog boxes, this flag causes the dialog box to use long file names. If this flag is not specified, or if the OFN_ALLOWMULTISELECT flag is also set, old-style dialog boxes use short file names (8.3 format) for file names with spaces. Explorer-style dialog boxes ignore this flag and always display long file names.
OFN_NOCHANGEDIR
Restores the current directory to its original value if the user changed the directory while searching for files.
Windows NT 4.0/2000/XP: This flag is ineffective for GetOpenFileName.
OFN_NODEREFERENCELINKS
Directs the dialog box to return the path and file name of the selected shortcut (.LNK) file. If this value is not specified, the dialog box returns the path and file name of the file referenced by the shortcut.
OFN_NOLONGNAMES
For old-style dialog boxes, this flag causes the dialog box to use short file names (8.3 format). Explorer-style dialog boxes ignore this flag and always display long file names.
OFN_NONETWORKBUTTON
Hides and disables the Network button.
OFN_NOREADONLYRETURN
Specifies that the returned file does not have the Read Only check box selected and is not in a write-protected directory.
OFN_NOTESTFILECREATE
Specifies that the file is not created before the dialog box is closed. This flag should be specified if the application saves the file on a create-nonmodify network share. When an application specifies this flag, the library does not check for write protection, a full disk, an open drive door, or network protection. Applications using this flag must perform file operations carefully, because a file cannot be reopened once it is closed.
OFN_NOVALIDATE
Specifies that the common dialog boxes allow invalid characters in the returned file name. Typically, the calling application uses a hook procedure that checks the file name by using the FILEOKSTRING message. If the text box in the edit control is empty or contains nothing but spaces, the lists of files and directories are updated. If the text box in the edit control contains anything else, nFileOffset and nFileExtension are set to values generated by parsing the text. No default extension is added to the text, nor is text copied to the buffer specified by lpstrFileTitle. If the value specified by nFileOffset is less than zero, the file name is invalid. Otherwise, the file name is valid, and nFileExtension and nFileOffset can be used as if the OFN_NOVALIDATE flag had not been specified.
OFN_OVERWRITEPROMPT
Causes the Save As dialog box to generate a message box if the selected file already exists. The user must confirm whether to overwrite the file.
OFN_PATHMUSTEXIST
Specifies that the user can type only valid paths and file names. If this flag is used and the user types an invalid path and file name in the File Name entry field, the dialog box function displays a warning in a message box.
OFN_READONLY
Causes the Read Only check box to be selected initially when the dialog box is created. This flag indicates the state of the Read Only check box when the dialog box is closed.
OFN_SHAREAWARE
Specifies that if a call to the OpenFile function fails because of a network sharing violation, the error is ignored and the dialog box returns the selected file name. If this flag is not set, the dialog box notifies your hook procedure when a network sharing violation occurs for the file name specified by the user. If you set the OFN_EXPLORER flag, the dialog box sends the CDN_SHAREVIOLATION message to the hook procedure. If you do not set OFN_EXPLORER, the dialog box sends the SHAREVISTRING registered message to the hook procedure.
OFN_SHOWHELP
Causes the dialog box to display the Help button. The hwndOwner member must specify the window to receive the HELPMSGSTRING registered messages that the dialog box sends when the user clicks the Help button. An Explorer-style dialog box sends a CDN_HELP notification message to your hook procedure when the user clicks the Help button.
OFN_USESHELLITEM
Do not use.