MFC編程之文件對話框

轉載請註明來源 : http://blog.csdn.net/enjoy5512

最近在寫一個對文件進行DES加密的程序,想着能加個界面應該會好看多了,於是便想起來以前學的MFC編程
編譯環境 Windows XP SP2 + VC6.0


1 . 新建一個MFC對話框(除了圖中圈出來的地方要注意之外,其他的默認就行)
這裏寫圖片描述

這裏寫圖片描述

這裏寫圖片描述


2 . 然後將原來的對話框上面的確定,取消按鈕和靜態文本框刪除,在右邊的工具欄裏
添加一個靜態文本框,ID設爲IDC_STATIC_PATH,標題改爲文件路徑.
添加一個編輯框,ID設爲IDC_EDIT_PATH,在樣式裏設置只讀屬性,擴展樣式選擇從右到左讀取,這樣對於文件路徑太長的也能看到文件名
添加一個按鈕,ID設爲IDC_BUTTON_PATH,標題改成瀏覽
最終效果如下:
這裏寫圖片描述


3 . 到此爲止,我們的界面就做好了,然後就是添加消息響應函數了
雙擊瀏覽按鈕,根據提示添加按鈕點擊消息響應函數,然後就跳轉到下面的函數裏,在這裏,我們添加消息響應函數的實現代碼
這裏寫圖片描述

響應函數的代碼如下:

void CDesDlg::OnButtonOpen() 
{
    // TODO: Add your control notification handler code here
    CString szFilePath = L"";                       //保存文件路徑

    CFileDialog CcmFileOpenDlg(TRUE,NULL,NULL,NULL,NULL,NULL);  //獲取打開文件對話框的類

    if (IDOK == CcmFileOpenDlg.DoModal())           //文件選擇對話框
    {
        szFilePath = CcmFileOpenDlg.GetPathName();  //獲取文件路徑
        SetDlgItemText(IDC_EDIT_PATH,szFilePath);   //設置EDIT框的值
    }
}

運行結果圖:
這裏寫圖片描述

運行結果


附關鍵函數解析(摘自百度百科):

CFileDialog類封裝了Windows常用的文件對話框。常用的文件對話框提供了一種簡單的與Windows標準相一致的文件打開和文件存盤對話框功能。

語法

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   是最重要的一個參數,它指明可供選擇的文件類型和相應的擴展名。
pParentWnd   爲父窗口指針。

構造函數

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變量。

下一篇將介紹怎麼通過拖動文件到對話框,直接獲取文件的路徑

發佈了42 篇原創文章 · 獲贊 37 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章