根据前面所讲内容,鸡啄米给大家做个文件对话框实例。
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.修改两个消息处理函数如下:
- void CExample17Dlg::OnBnClickedOpenButton()
- {
- // TODO: Add your control notification handler code here
- // 设置过滤器
- TCHAR szFilter[] = _T("文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||");
- // 构造打开文件对话框
- CFileDialog fileDlg(TRUE, _T("txt"), NULL, 0, szFilter, this);
- CString strFilePath;
- // 显示打开文件对话框
- if (IDOK == fileDlg.DoModal())
- {
- // 如果点击了文件对话框上的“打开”按钮,则将选择的文件路径显示到编辑框里
- strFilePath = fileDlg.GetPathName();
- SetDlgItemText(IDC_OPEN_EDIT, strFilePath);
- }
- }
- void CExample17Dlg::OnBnClickedSaveButton()
- {
- // TODO: Add your control notification handler code here
- // 设置过滤器
- TCHAR szFilter[] = _T("文本文件(*.txt)|*.txt|Word文件(*.doc)|*.doc|所有文件(*.*)|*.*||");
- // 构造保存文件对话框
- CFileDialog fileDlg(FALSE, _T("doc"), _T("my"), OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this);
- CString strFilePath;
- // 显示保存文件对话框
- if (IDOK == fileDlg.DoModal())
- {
- // 如果点击了文件对话框上的“保存”按钮,则将选择的文件路径显示到编辑框里
- strFilePath = fileDlg.GetPathName();
- SetDlgItemText(IDC_SAVE_EDIT, strFilePath);
- }
- }
上面显示编辑框内容时,鸡啄米使用了Windows API函数SetDlgItemText,当然也可以先给编辑框关联变量,然后再使用鸡啄米在创建对话框类和添加控件变量中介绍的
CDialogEx::UpdateData()函数,但是鸡啄米比较习惯使用SetDlgItemText函数,感觉比较灵活。