【chatgpt】写一个文件CListctrl
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | class CFolderListCtrl : public CListCtrl { public : CImageList m_imageList; CFolderListCtrl() { // 创建图像列表,包含文件夹和文件的图标 m_imageList.Create(16, 16, ILC_COLOR32, 0, 2); HICON hIconFolder = ( HICON )LoadImage(NULL, _T( "folder.ico" ), IMAGE_ICON, 16, 16, LR_LOADFROMFILE); HICON hIconFile = ( HICON )LoadImage(NULL, _T( "file.ico" ), IMAGE_ICON, 16, 16, LR_LOADFROMFILE); m_imageList.Add(hIconFolder); m_imageList.Add(hIconFile); // 设置图像列表给列表控件 SetImageList(&m_imageList, LVSIL_SMALL); // 设置列标题 InsertColumn(0, _T( "文件名" ), LVCFMT_LEFT, 200); InsertColumn(1, _T( "类型" ), LVCFMT_LEFT, 100); InsertColumn(2, _T( "大小" ), LVCFMT_LEFT, 100); InsertColumn(3, _T( "修改日期" ), LVCFMT_LEFT, 150); } void AddFolder( const CString& folderPath) { // 添加文件夹及其属性到列表控件 SHFILEINFO fileInfo; SHGetFileInfo(folderPath, 0, &fileInfo, sizeof (fileInfo), SHGFI_DISPLAYNAME | SHGFI_ICON | SHGFI_SMALLICON); int index = InsertItem(GetItemCount(), fileInfo.szDisplayName, fileInfo.iIcon); SetItemText(index, 1, L "文件夹" ); FILETIME fileTime = { 0 }; SHGetFileInfo(folderPath, 0, &fileInfo, sizeof (fileInfo), SHGFI_TYPENAME | SHGFI_SMALLICON | SHGFI_ATTRIBUTES); SetItemText(index, 2, L "-" ); SetItemText(index, 3, FormatFileTime(fileTime)); SetItemData(index, FILE_ATTRIBUTE_DIRECTORY); } void AddFile( const CString& filePath) { // 添加文件及其属性到列表控件 SHFILEINFO fileInfo; SHGetFileInfo(filePath, 0, &fileInfo, sizeof (fileInfo), SHGFI_DISPLAYNAME | SHGFI_ICON | SHGFI_SMALLICON); int index = InsertItem(GetItemCount(), fileInfo.szDisplayName, fileInfo.iIcon); SetItemText(index, 1, L "文件" ); WIN32_FILE_ATTRIBUTE_DATA fileAttrData; GetFileAttributesEx(filePath, GetFileExInfoStandard, &fileAttrData); ULONGLONG fileSize = fileAttrData.nFileSizeLow | (fileAttrData.nFileSizeHigh << 32); SetItemText(index, 2, FormatFileSize(fileSize)); SetItemText(index, 3, FormatFileTime(fileAttrData.ftLastWriteTime)); SetItemData(index, FILE_ATTRIBUTE_NORMAL); } CString FormatFileSize( ULONGLONG fileSize) { CString strSize; if (fileSize >= 1024 * 1024 * 1024) { strSize.Format(_T( "%.2f GB" ), fileSize / (1024.0 * 1024.0 * 1024.0)); } else if (fileSize >= 1024 * 1024) { strSize.Format(_T( "%.2f MB" ), fileSize / (1024.0 * 1024.0)); } else if (fileSize >= 1024) { strSize.Format(_T( "%.2f KB" ), fileSize / 1024.0); } else { strSize.Format(_T( "%.2f Bytes" ), ( double )fileSize); } return strSize; } CString FormatFileTime( const FILETIME& fileTime) { SYSTEMTIME sysTime; FileTimeToSystemTime(&fileTime, &sysTime); CString strTime; strTime.Format(_T( "%04d-%02d-%02d %02d:%02d:%02d" ), sysTime.wYear, sysTime.wMonth, sysTime.wDay, sysTime.wHour, sysTime.wMinute, sysTime.wSecond); return strTime; } }; 以上是一个继承自CListCtrl的CFolderListCtrl类,用于显示文件夹和文件的列表,并支持显示文件的图标。在构造函数中,创建了一个图像列表,其中包含文件夹和文件的图标,并设置给列表控件。然后设置了列标题。AddFolder和AddFile方法用于向列表控件中添加文件夹和文件,并设置相应的属性,比如文件名、类型、大小和修改日期等。FormatFileSize和FormatFileTime方法用于格式化文件大小和文件修改日期的显示。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
2022-08-29 esp32 自己配置变量
2022-08-29 片选拉高,spi从设备总线
2022-08-29 xQueueSemaphoreTake queue.c:1545
2022-08-29 assert failed: tcpip_send_msg_wait_sem IDF/components/lwip/lwip/src/api/tcpip.c:455 (Invalid mbox)
2022-08-29 esp32 mdf自组网
2022-08-29 esp32 wifi:max connection, deauth