标签:modify report etc mfc mode stat cad wrap 知识
m_EditCtrl = L"D:\
// 初始化函数 BOOL CFileManagerDlg::OnInitDialog() { CDialog::OnInitDialog(); ? // 初始化列表控件的风格 m_ListCtrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES); ? // 初始化列表控件的列选项 m_ListCtrl.InsertColumn(0, L"文件名", LVCFMT_CENTER, 200); m_ListCtrl.InsertColumn(1, L"修改时间", LVCFMT_CENTER, 150); m_ListCtrl.InsertColumn(2, L"类型", LVCFMT_CENTER, 140); m_ListCtrl.InsertColumn(3, L"大小", LVCFMT_CENTER, 100); ? // 默认遍历 D 盘的内容 GetFileInfo(m_EditCtrl); ? return 0; }
// 获取文件夹下的所有文件和目录 void CFileManagerDlg::GetFileInfo(CString FilePath) { // 1. 清空列表中已存在的数据 m_ListCtrl.DeleteAllItems(); ? // 2. 定义需要的数据 WIN32_FIND_DATA FileInfo = { 0 }; ? // 3. 拼接路径为 D:\\* = FilePath + L"\\*"; 并且获取第一个文件 HANDLE FindHanlde = FindFirstFile(FilePath + L"\\*", &FileInfo); ? // 4. 判断文件是否获取成功,并继续遍历 if (INVALID_HANDLE_VALUE != FindHanlde) { do { // 5. 添加数据到列表中时,排除 . 目录 if (_tcscmp(FileInfo.cFileName, L".")) { // 6. 向列表内添加数据 InsetFileInfo(FileInfo); } // 7. 遍历下一个文件 } while (FindNextFile(FindHanlde, &FileInfo)); } } // 向列表中添加数据 void CFileManagerDlg::InsetFileInfo(WIN32_FIND_DATA& FileInfo) { CString TempString; ? // 0. 获取当前列表最后一个位置 int Count = m_ListCtrl.GetItemCount(); ? // 1. 在列表中添加一行名称 m_ListCtrl.InsertItem(Count, FileInfo.cFileName); ? // 2. 添加修改时间 FILETIME LocalFileTime = { 0 }; FileTimeToLocalFileTime(&FileInfo.ftLastWriteTime, &LocalFileTime); SYSTEMTIME SystemTime = { 0 }; FileTimeToSystemTime(&LocalFileTime, &SystemTime); TempString.Format(L"%d/%d/%d/%d:%d:%d", SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay, SystemTime.wHour, SystemTime.wMinute, SystemTime.wSecond); m_ListCtrl.SetItemText(Count, 1, TempString); ? // 3. 添加类型,属性 TempString = L""; if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) TempString += L"目录 "; else TempString += L"文件 "; if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) TempString += L"隐藏 "; m_ListCtrl.SetItemText(Count, 2, TempString); ? // 4. 根据类型进行大小的计算 if (FileInfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) m_ListCtrl.SetItemText(Count, 3, L"-"); else { TempString.Format(L"%.2lf MB", FileInfo.nFileSizeLow / 1024.0 / 1024.0); m_ListCtrl.SetItemText(Count, 3, TempString); } ? ? ? }
// 左键双击的点击 void CFileManagerDlg::OnDblclkList1(NMHDR* pNMHDR, LRESULT* pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // 获取当前的路径,保存编辑框中 UpdateData(TRUE); ? // 1. 拼接点击的到的文件或目录对应的全路径 CString FilePath = m_EditCtrl + L"\\" + m_ListCtrl.GetItemText(pNMItemActivate->iItem, 0); ? // 2. 判断是不是一个目录 if (GetFileAttributes(FilePath) & FILE_ATTRIBUTE_DIRECTORY) { // 3. 如果是目录就继续遍历 GetFileInfo(FilePath); ? // 4. 更新当前所在的路径 WCHAR * Name = nullptr; GetFullPathName(FilePath.GetBuffer(), MAX_PATH, m_EditCtrl.GetBuffer(MAX_PATH), &Name); UpdateData(FALSE); } ? *pResult = 0; }
?
void CFileManagerDlg::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); ? // 拼接路径并传入到构造函数中 UpdateData(TRUE); ////////////////////////////////////////////////////////// CString FilePath = m_EditCtrl + L"\\" + m_ListCtrl.GetItemText(pNMItemActivate->iItem, 0); ////////////////////////////////////////////////////////// ? // 弹出对话框 CMyFileDialog Dialog(FilePath); Dialog.DoModal(); ? *pResult = 0; }
CMyFileDialog::CMyFileDialog(CString FileName, CWnd* pParent /*=nullptr*/) : CDialogEx(IDD_FILEDIALOG, pParent) { GetFullPathName(FileName.GetBuffer(), MAX_PATH, m_FileName.GetBuffer(MAX_PATH), &Name); }
// 初始化对话框,显示数据 BOOL CMyFileDialog::OnInitDialog() { CDialogEx::OnInitDialog(); ? // 创建结构体用于保存文件内容 SHFILEINFO FileInfo = { 0 }; ? // 获取类型 SHGetFileInfo(m_FileName, 0, &FileInfo, sizeof(SHFILEINFO), SHGFI_TYPENAME); SetDlgItemText(IDC_EDIT2, FileInfo.szTypeName); ? // 获取图标 SHGetFileInfo(m_FileName, 0, &FileInfo, sizeof(SHFILEINFO), SHGFI_ICON); SendDlgItemMessage(IDC_STATIC1, STM_SETICON, (WPARAM)FileInfo.hIcon, NULL); ? // 输出名字 SetDlgItemText(IDC_EDIT1, Name); ? // 设置对话框内的属性 int attr = GetFileAttributes(m_FileName); ? if (attr & FILE_ATTRIBUTE_HIDDEN) SendDlgItemMessage(IDC_CHECK2, BM_SETCHECK, BST_CHECKED); if (attr & FILE_ATTRIBUTE_READONLY) SendDlgItemMessage(IDC_CHECK1, BM_SETCHECK, BST_CHECKED); ? return TRUE; } ?
// 应用设置
void CMyFileDialog::OnBnClickedButton2()
{
// 获取默认的属性
int attr = GetFileAttributes(m_FileName);
?
if (SendDlgItemMessage(IDC_CHECK2, BM_GETCHECK) == BST_CHECKED)
attr |= FILE_ATTRIBUTE_HIDDEN;
else
attr &= ~FILE_ATTRIBUTE_HIDDEN;
?
if (SendDlgItemMessage(IDC_CHECK1, BM_GETCHECK) == BST_CHECKED)
attr |= FILE_ATTRIBUTE_READONLY;
else
attr &= ~FILE_ATTRIBUTE_READONLY;
?
// 设置修改后的属性
SetFileAttributes(m_FileName, attr);
CDialogEx::OnOK();
}
// 5. 添加数据到列表中时,排除 . 目录
if (_tcscmp(FileInfo.cFileName, L"."))
{
// 6. 向列表内添加数据
InsetFileInfo(FileInfo);
}
GetFullPathName(FilePath.GetBuffer(), MAX_PATH, m_EditCtrl.GetBuffer(MAX_PATH), &Name);
// 创建结构体用于保存文件内容 SHFILEINFO FileInfo = { 0 }; // 获取类型 SHGetFileInfo(m_FileName, 0, &FileInfo, sizeof(SHFILEINFO), SHGFI_TYPENAME); SetDlgItemText(IDC_EDIT2, FileInfo.szTypeName);
标签:modify report etc mfc mode stat cad wrap 知识
原文地址:https://www.cnblogs.com/ltyandy/p/10960965.html