1. 程式人生 > >MFC檔案選擇

MFC檔案選擇

檔案對話方塊例項

根據前面所講內容,雞啄米給大家做個檔案對話方塊例項。

       1.建立一個基於對話方塊的MFC應用程式工程,名稱設為“Example17”。

       2.修改主對話方塊IDD_EXAMPLE17_DIALOG的模板,刪除自動生成的“TODO: Place dialog controls here.”靜態文字框,新增兩個編輯框,ID分別為IDC_OPEN_EDIT和IDC_SAVE_EDIT,再新增兩個按鈕,ID分別設為IDC_OPEN_BUTTON和IDC_SAVE_BUTTON,Caption分別設為“開啟”和“儲存”。按鈕IDC_OPEN_BUTTON用於顯示開啟檔案對話方塊,編輯框IDC_OPEN_EDIT顯示在開啟檔案對話方塊中選擇的檔案路徑。按鈕IDC_SAVE_BUTTON用於顯示儲存檔案對話方塊,編輯框IDC_SAVE_BUTTON顯示在儲存檔案對話方塊中選擇的檔案路徑。

       3.分別為按鈕IDC_OPEN_BUTTON和IDC_SAVE_BUTTON新增點選訊息的訊息處理函式CExample17Dlg::OnBnClickedOpenButton()和CExample17Dlg::OnBnClickedSaveButton()。

       4.修改兩個訊息處理函式如下:

C++程式碼
  1. void CExample17Dlg::OnBnClickedOpenButton()   
  2. {   
  3. // TODO: Add your control notification handler code here
  4. // 設定過濾器
  5. TCHAR szFilter[] = _T(
    "文字檔案(*.txt)|*.txt|所有檔案(*.*)|*.*||");   
  6. // 構造開啟檔案對話方塊
  7.     CFileDialog fileDlg(TRUE, _T("txt"), NULL, 0, szFilter, this);   
  8.     CString strFilePath;   
  9. // 顯示開啟檔案對話方塊
  10. if (IDOK == fileDlg.DoModal())   
  11.     {   
  12. // 如果點選了檔案對話方塊上的“開啟”按鈕,則將選擇的檔案路徑顯示到編輯框裡
  13.         strFilePath = fileDlg.GetPathName();   
  14.         SetDlgItemText(IDC_OPEN_EDIT, strFilePath);   
  15.     }   
  16. }   
  17. void CExample17Dlg::OnBnClickedSaveButton()   
  18. {   
  19. // TODO: Add your control notification handler code here
  20. // 設定過濾器
  21. TCHAR szFilter[] = _T("文字檔案(*.txt)|*.txt|Word檔案(*.doc)|*.doc|所有檔案(*.*)|*.*||");   
  22. // 構造儲存檔案對話方塊
  23.     CFileDialog fileDlg(FALSE, _T("doc"), _T("my"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);   
  24.     CString strFilePath;   
  25. // 顯示儲存檔案對話方塊
  26. if (IDOK == fileDlg.DoModal())   
  27.     {   
  28. // 如果點選了檔案對話方塊上的“儲存”按鈕,則將選擇的檔案路徑顯示到編輯框裡
  29.         strFilePath = fileDlg.GetPathName();   
  30.         SetDlgItemText(IDC_SAVE_EDIT, strFilePath);   
  31.     }   
  32. }  

       上面顯示編輯框內容時,雞啄米使用了Windows API函式SetDlgItemText,當然也可以先給編輯框關聯變數,然後再使用雞啄米在建立對話方塊類和新增控制元件變數中介紹的
CDialogEx::UpdateData()函式,但是雞啄米比較習慣使用SetDlgItemText函式,感覺比較靈活。