考完六级心情大好,去论坛逛了逛,做了几个作业,总结下用到的函数和方法
整体功能如下:
其中还有获取当前系统时间并格式化输出的功能,界面上没有体现出来。
窗口界面控件统计及关联变量如下:
编辑框: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