考完六级心情大好,去论坛逛了逛,做了几个作业,总结下用到的函数和方法
整体功能如下:
其中还有获取当前系统时间并格式化输出的功能,界面上没有体现出来。
窗口界面控件统计及关联变量如下:
编辑框:ID: IDC_EDIT_FILEPATH
属性设置:
只读:CheckBox 控件 关联变量:BOOL m_IsReadOnly 隐藏 :CheckBox 关联变量:BOOL m_IsHidden
文件时间自定义:
创建时间:Date Time Picker 控件 关联变量:控件变量 m_CreateTime
创建时间:Date Time Picker 控件 关联变量:控件变量 m_ModifyTime
为框架类添加成员变量: CString m_filepath
功能函数:
一,让对话框支持通过拖放方式选择文件
1,首先设置对话框的:Accept Files: True
2, 对话框.h中(消息映射表中)添加
afx_msg void OnDropFiles(HDROP hDropInfo);
3, .cpp,消息map中添加
ON_WM_DROPFILES()
void CXXXXDlg::OnDropFiles(HDROP hDropInfo)
{
// TODO: Add your message handler code here and/or call default
CString filename;
DragQueryFile(hDropInfo,0,filename.GetBuffer(512),512);
filename.ReleaseBuffer();
m_filepath = filename;
SetDlgItemText(IDC_EDIT_FILEPATH,m_filepath);
CDialog::OnDropFiles(hDropInfo);
}
二,点击选择按钮,弹出文件选择对话框,设置在列表中显示的文件类型
void CXXXXDlg::OnBnClickedBtnSelectfile()
{
// TODO: 在此添加控件通知处理程序代码
CFileDialog fileDlg(true);
fileDlg.m_ofn.lpstrTitle = "选择你要设置的文件";
fileDlg.m_ofn.lpstrFilter = "Executeable File(*.exe)\0*.exe\0All Files(*.*)\0*.*\0\0";
if(IDOK==fileDlg.DoModal())
{
m_filepath = fileDlg.GetPathName();
SetDlgItemText(IDC_EDIT_FILEPATH,m_filepath);
}
}
三,接收用户的选择,单击“设置属性“按钮设置文件的只读和隐藏属性
void CXXXXDlg::OnBnClickedBtnSetattr()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData();
if(m_filepath == "")
{
MessageBox("请先选择文件","错误",MB_OK);
return;
}
DWORD FileAttr = GetFileAttributes(m_filepath); //获取文件默认属性
if(INVALID_FILE_ATTRIBUTES == FileAttr )
{//获取属性失败(文件不存在)
MessageBox("获取文件信息失败!","错误",MB_OK);
return;
}
else
{
if(m_IsReadOnly)
{//若选择了checkbox的只读则追加只读属性
SetFileAttributes(m_filepath,FileAttr | FILE_ATTRIBUTE_READONLY); //和原来的属性按位与
}
if(m_IsHidden)
{//若选择了checkbox的隐藏则追加隐藏属性
SetFileAttributes(m_filepath,FileAttr | FILE_ATTRIBUTE_HIDDEN);
}
CTime t = CTime::GetCurrentTime();//获得当前系统时间
CString strTime =t.Format("%A, %B %d, %Y,%H:%M:%S");//格式化得到的时间
MessageBox("设置文件属性成功!",strTime,MB_OK);
}
}
四,文件时间自定义
void Cxiao7_2Dlg::OnBnClickedBtnModify()
{
// TODO: 在此添加控件通知处理程序代码
UpdateData(true);
SYSTEMTIME CreateTime,ModifyTime;
m_CreateTime.GetTime(&CreateTime);//从界面DateTimePicker控件接受用户选选择的时间
m_ModifyTime.GetTime(&ModifyTime);
if(m_filepath != "")
{
FILETIME fCreateTime,fModifyTime;
//系统时间转换为文件时间,注意:只能转换为文件时间才能设置其时间
SystemTimeToFileTime(&CreateTime,&fCreateTime);
SystemTimeToFileTime(&CreateTime,&fModifyTime);
//创建CFile对象,CFile是MFC封装好的类,用SDK的同学注意一下
CFile file(m_filepath,CFile::modeWrite);
//设置文件时间,四个参数:文件句柄,创建时间,最后访问时间,最后修改时间
SetFileTime(file,&fCreateTime,NULL,&fModifyTime);
MessageBox("修改文件时间成功!","提示",MB_OK);
}
else
{
MessageBox("请先选择文件","错误",MB_OK);
}
}
注意此处设置的时间比实际要提前一天
源代码:
http://download.csdn.net/detail/eldn__/4920173