MFC CFileDialog類詳解


文件對話框風格詳解 
dwFlags 
Flags 
一組位標志,你可以用它來初始化對話框。當對話框返回,設置這些標志表明用戶的輸入。這個成員可以是下列標志的組合。 
OFN_ALLOWMULTISELECT 
指定的文件名列表框中允許多個選擇。如果還設置了OFN_EXPLORER的標志,這個對話框中使用“資源管理器風格的用戶界面,否則,它使用的舊風格的用戶界面。 
如 果用戶選擇多個文件,lpstrFile緩沖區返回到當前目錄,然后選定的文件的文件名的路徑。該nFileOffset件是的偏移量,在字節或字符,第 一個文件名,和的nFileExtension部件還沒有使用。資源管理器風格的對話框,目錄和文件名字符串是NULL分離的,一個額外的NULL字符 后,最后的文件名。通過這種格式的資源管理器風格的對話框,返回包含空格的長文件名的。對於舊風格的對話框,目錄和文件名字符串由空格分隔的功能使用短文 件名的文件名中包含空格。您可以使用FindFirstFile函數長和短文件名之間的轉換。 
一個舊風格的對話框,如果你指定一個自定義的模板定義的文件名列表框中必須包含LBS_EXTENDEDSEL的價值。 
OFN_CREATEPROMPT 
如果用戶指定的文件不存在,這個標志使該對話框提示用戶創建的文件的權限。如果用戶選擇創建的文件,對話框關閉,該函數返回指定名稱的;否則,對話框保持打開狀態。如果您使用此標志的OFN_ALLOWMULTISELECT標志,該對話框允許用戶指定一個不存在的文件。 
OFN_DONTADDTORECENT 
Windows 2000/XP中防止系統添加一個鏈接到選定的文件在文件系統的目錄,其中包含用戶最近使用過的文件。要檢索此目錄的位置,請致電SHGetSpecialFolderLocation函數的CSIDL_RECENT標志。 
OFN_ENABLEHOOK 
啟用鈎子函數,中指定的lpfnHook會員。 
OFN_ENABLEINCLUDENOTIFY 
Windows 2000/XP系統:使對話框發送CDN_INCLUDEITEM通知的的消息到您的OFNHookProc的鈎子程序,當用戶打開一個文件夾。對話框發 送一個新打開的文件夾中的每個項目的通知。這些消息使您可以控制​​哪些項目對話框顯示在文件夾中的項目清單。 
OFN_ENABLESIZING 
是Windows 2000/XP,Windows 98/Me中:打開資源管理器樣式對話框,使用鼠標或鍵盤可以調整大小。默認情況下,瀏覽器風格的打開和保存對話框允許對話框,調整大小,無論是否設置了 這個標志。這個標志是必要的,如果你提供了一個鈎子程序或自定義模板。舊風格的對話框不允許調整大小。 
OFN_ENABLETEMPLATE 
表 明lpTemplateName成員的hInstance部件識別模塊中的一個對話框模板資源的名稱是一個指針。 ,如果OFN_EXPLORER標志被設置,系統使用指定的模板來創建一個對話框,是一個孩子的默認資源管理器風格的對話框。如果 OFN_EXPLORER標志沒有被設置,系統使用模板來創建一個舊風格的對話框,它取代了默認對話框。 
OFN_ENABLETEMPLATEHANDLE 
表 示的hInstance成員標識了一個數據塊,其中包含預先載入的對話框模板。如果這個標志是指定的系統忽略的lpTemplateName的。 ,如果OFN_EXPLORER標志被設置,系統使用指定的模板來創建一個對話框,是一個孩子的默認資源管理器風格的對話框。如果 OFN_EXPLORER標志沒有被設置,系統使用模板來創建一個舊風格的對話框,它取代了默認對話框。 
OFN_EXPLORER 
表示,任何自定義“打開”或“另存為”對話框中使用新的瀏覽器類型的自定義方法。欲了解更多信息,請參見“資源管理器風格的鈎子程序和資源管理器風格的自定義模板。 
默認情況下,打開和另存為對話框使用資源管理器風格的用戶界面,無論是否設置了這個標志。這個標志是必要的,只有當你提供一個鈎子程序或自定義模板,或設置OFN_ALLOWMULTISELECT標志。 
如果你想老風格的用戶界面,省略了OFN_EXPLORER標志,並提供一個替代舊式的模板或鈎子程序。如果你想在舊的風格,但並不需要一個自定義的模板或鈎子程序,只需提供一個鈎子程序,它總是返回FALSE。 
OFN_EXTENSIONDIFFERENT 
指定用戶輸入一個不同的文件擴展名從指定的擴展名由lpstrDefExt。該函數不使用此標志,如果lpstrDefExt NULL。 
OFN_FILEMUSTEXIST 
指 定用戶中的現有文件的文件名輸入字段中鍵入唯一名稱。如果這個標志被指定,用戶輸入一個無效的名字,對話框的程序中顯示一個消息框,警告。如果這個標志被 指定,OFN_PATHMUSTEXIST標志也使用。在打開對話框中,可以使用此標志。它不能使用另存為“對話框中。 
OFN_FORCESHOWHIDDEN 
Windows 2000/XP系統:強制放映系統和隱藏文件,從而替代用戶設置顯示或不顯示隱藏文件。然而,未示出的文件都被標記為系統和隱藏。 
OFN_HIDEREADONLY 
隱藏只讀“復選框。 
OFN_LONGNAMES 
對於舊風格的對話框,這個標志使對話框使用長文件名。如果這個標志沒有被指定,或如果在OFN_ALLOWMULTISELECT的標志也設置,使用舊風格的對話框的文件名中包含空格的短文件名(8.3格式)。資源管理器風格的對話框忽略此標志,並始終顯示長文件名。 
OFN_NOCHANGEDIR 
恢復當前目錄到原來的值,如果用戶改變了目錄,而搜索的文件。 
Windows NT 4.0/2000/XP的:這個標志是無效的GetOpenFileName。 
OFN_NODEREFERENCELINKS 
指示對話框返回的路徑和文件名,選定的快捷方式(LNK)文件。如果這個值沒有指定,則對話框返回的快捷方式引用的文件的路徑和文件名。 
OFN_NOLONGNAMES 
對於舊風格的對話框,這個標志使該對話框中使用短文件名(8.3格式)。資源管理器風格的對話框忽略此標志,並始終顯示長文件名。 
OFN_NONETWORKBUTTON 
隱藏和禁用網絡按鈕。 
OFN_NOREADONLYRETURN 
指定的文件不具有“只讀”復選框處於選中狀態,而不是在寫保護的目錄。 
OFN_NOTESTFILECREATE 
指 定的文件不被創建對話框之前被關閉。如果應用程序保存的文件上一個create-nonmodify的網絡共享,應指定此標志。當一個應用程序指定了這個 標志,庫不檢查寫保護,一個完整的磁盤,打開驅動器門或網絡保護。應用程序使用此標志必須小心,因為一旦關閉,就無法重新打開一個文件可以進行文件操作。 
OFN_NOVALIDATE 
指 定的通用對話框允許返回的文件名中的無效字符。通常情況下,調用應用程序使用一個鈎子程序,檢查文件名通過使用FILEOKSTRING的消息。如果編輯 控件中的文本框為空或包含什么,但空間,更新的文件和目錄的列表。如果在文本框中編輯控件中包含任何東西,nFileOffset和 nFileExtension通過分析文本生成的值。沒有默認的擴展名添加到文本,也不是文本復制到指定的緩沖區的lpstrFileTitle。如果所 指定nFileOffset的值小於零,該文件名是無效。否則,該文件名稱是有效的,和nFileExtension和nFileOffset作為,如果 OFN_NOVALIDATE標志沒有被指定,可以使用。 
OFN_OVERWRITEPROMPT 
另存為“對話框中生成一個消息框,如果選擇的文件已經存在。用戶必須確認是否覆蓋文件。 
OFN_PATHMUSTEXIST 
指定用戶可以只輸入有效的路徑和文件名。如果使用此標志時,用戶在文件名輸入字段中鍵入一個無效的路徑和文件名,對話框函數在消息框中顯示一個警告。 
OFN_READONLY 
使只讀“復選框最初創建對話框時,可以選擇。此標志表示只讀“復選框關閉該對話框時的狀態。 
OFN_SHAREAWARE 
指 定,如果OpenFile函數調用失敗,因為網絡共享沖突,錯誤被忽略,對話框返回選定的文件名。如果這個標志沒有設置,該對話框會通知你的鈎子程序,網 絡共享沖突發生時,由用戶指定的文件名。如果您設置的OFN_EXPLORER標志,對話框發送的CDN_SHAREVIOLATION,消息鈎子程序。 如果你不設置OFN_EXPLORER,對話框發送SHAREVISTRING的注冊消息的鈎子程序。 
OFN_SHOWHELP 
使對話框顯示“幫助”按鈕。 hwndOwner擁有成員必須指定的窗口,當用戶點擊“幫助”按鈕,對話框發送注冊消息接收HELPMSGSTRING。一個資源管理器風格的對話框發送一個CDN_HELP的通知消息,你的鈎子程序,當用戶點擊“幫助”按鈕。 
OFN_USESHELLITEM 
不要使用。 
 
簡介 
CFileDialog類封裝了Windows常用的文件對話框。常用的文件對話框提供了一種簡單的與Windows標准相一致的文件打開和文件存盤對話框功能。 
可以用構造函數提供的方式使用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::GetExtName( ) 得到完整的文件擴展名,如: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; 

 

原文出處:http://www.hacktea8.com/read.php?tid-1490-ds-1.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM