转载请注明来源 : http://blog.youkuaiyun.com/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变量。
下一篇将介绍怎么通过拖动文件到对话框,直接获取文件的路径