1 |
CFileDialog:CFileDialog( BOOL bOpenFileDialog, |
2 |
LPCTSTR lpszDefExt=NULL, |
3 |
LPCTSTR lpszFileName=NULL, |
4 |
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, |
5 |
LPCTSTR lpszFilter=NULL, |
6 |
CWnd * pParentWnd=NULL); |
bOpenFileDialog:TRUE爲打開文件對話框;FALSE爲保存文件對話框
lpszDefExt:缺省的擴展名
lpszFileName:缺省顯示在文件名組合框的編輯框的文件名,一般可選NULL
dwFlags:對話框風格,一般爲OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 即隱藏只讀選項和覆蓋已有文件前提示。
類型:
OFN_HIDEREADONLY:隱藏只讀選項
OFN_OVERWRITEPROMPT:覆蓋已有文件前提
OFN_ALLOWMULTISELECT:允許選擇多個文件
OFN_CREATEPROMPT:如果輸入的文件名不存在,則對話框返回詢問用戶是否根據次文件名創建文件的消息框
OFN_FILEMUSTEXIST:只能輸入已存在的文件名
OFN_FORCESHOWHIDDEN:可以顯示隱藏的文件
OFN_NOREADONLYRETURN:不返回只讀文件
OFN_OVERWRITEPROMPT:保存的文件已存在時,顯示文件已存在的信息
lpszFilter:文件篩選類型,它指明可供選擇的文件類型和相應的擴展名。參數格式如:
"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";文件類型說明和擴展名間用 | 分隔,同種類型文件的擴展名間可以用 ; 分割,每種文件類型間用 | 分隔,末尾用 || 指明。
pParentWnd:父窗口指針,一般可選NULL.
2、對話框選項常用屬性(實例:dialog)
dialog.m_ofn.lpstrTitle:顯示窗口標題。
dialog.m_ofn.lpstrInitialDir:初始化展開路徑。
dlg.m_ofn.lpstrFile:默認文件
dlg.m_ofn.lpstrFilter:文件篩選類型,注意與lpszFilter區別,要用"\0",不能用"|"
如:dlg.m_ofn.lpstrFilter="所有文件\0*.*\0圖像文件\0*.jpg;*.bmp;*.gif\0\0";
3、對話框常用方法
INT_PTR CFileDialog::DoModal() 顯示文件操作對話框,常用返回值:IDOK,點擊了打開確定操作 IDCANCEL,取消
CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目錄名和擴展名如:c:\test\test.txt。注,多文件選擇時返回目錄名
CString CFileDialog::GetFileName( ) 得到完整的文件名,包括擴展名如:test.txt
CString CFileDialog::GetExtName( ) 得到完整的文件擴展名,如:txt
CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目錄名和擴展名如:test
POSITION CFileDialog::GetStartPosition( ) 對於選擇了多個文件的情況得到第一個文件位置。
CString CFileDialog::GetNextPathName( POSITION& pos ) 對於選擇了多個文件的情況得到下一個文件位置,並同時返回當前文件名。但必須已經調用過POSITION CFileDialog::GetStartPosition( )來得到最初的POSITION變量。
4、示例——多文件打開操作,獲取文件名以“;”分開
01 |
//本代碼測試環境VS2008 c++ MFC |
02 |
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT, |
03 |
NULL,
); |
04 |
|
05 |
dlg.m_ofn.lpstrInitialDir = (BSTR)directoryName;
//設置對話框默認呈現的路徑 |
06 |
|
07 |
CString strFilePath; |
08 |
if (dlg.DoModal() == IDOK) |
09 |
{ |
10 |
CArray<CString, CString> aryFilename; |
11 |
POSITION posFile=dlg.GetStartPosition(); |
12 |
while (posFile!=NULL) |
13 |
{ |
14 |
aryFilename.Add(dlg.GetNextPathName(posFile)); |
15 |
} |
16 |
for ( int
i=0;i<aryFilename.GetSize();i++) |
17 |
{ |
18 |
if (strFilePath.GetLength()>0) |
19 |
{ |
20 |
strFilePath.AppendChar( ';' ); //多個文件‘;’分開 |
21 |
} |
22 |
strFilePath+= aryFilename.GetAt(i); |
23 |
} |
24 |
|