From 70d5382fda3d6ce31011a1e429fbb31223fa9a60 Mon Sep 17 00:00:00 2001
From: yuanyuanxiang <962914132@qq.com>
Date: Mon, 9 Jun 2025 03:36:10 +0800
Subject: [PATCH] Improve: #48 Support sorting in file management dialog
---
server/2015Remote/2015Remote_vs2015.vcxproj | 2 ++
server/2015Remote/FileManagerDlg.cpp | 3 +-
server/2015Remote/FileManagerDlg.h | 5 +--
server/2015Remote/SortListCtrl.cpp | 34 +++++++++++++++++++++
server/2015Remote/SortListCtrl.h | 19 ++++++++++++
5 files changed, 60 insertions(+), 3 deletions(-)
create mode 100644 server/2015Remote/SortListCtrl.cpp
create mode 100644 server/2015Remote/SortListCtrl.h
diff --git a/server/2015Remote/2015Remote_vs2015.vcxproj b/server/2015Remote/2015Remote_vs2015.vcxproj
index 36cc6f3..0f1f0a4 100644
--- a/server/2015Remote/2015Remote_vs2015.vcxproj
+++ b/server/2015Remote/2015Remote_vs2015.vcxproj
@@ -281,6 +281,7 @@
+
@@ -334,6 +335,7 @@
+
Create
Create
diff --git a/server/2015Remote/FileManagerDlg.cpp b/server/2015Remote/FileManagerDlg.cpp
index 8a4a75c..428afe0 100644
--- a/server/2015Remote/FileManagerDlg.cpp
+++ b/server/2015Remote/FileManagerDlg.cpp
@@ -234,7 +234,6 @@ BOOL CFileManagerDlg::OnInitDialog()
// 添加下拉按钮
m_wndToolBar_Local.AddDropDownButton(this, IDT_LOCAL_VIEW, IDR_LOCAL_VIEW);
-
if (!m_wndToolBar_Remote.Create(this, WS_CHILD |
WS_VISIBLE | CBRS_ALIGN_ANY | CBRS_TOOLTIPS | CBRS_FLYBY, ID_REMOTE_TOOLBAR)
||!m_wndToolBar_Remote.LoadToolBar(IDR_TOOLBAR2))
@@ -284,6 +283,8 @@ BOOL CFileManagerDlg::OnInitDialog()
m_ProgressCtrl->SetRange(0, 100); //设置进度条范围
m_ProgressCtrl->SetPos(20); //设置进度条当前位置
+ m_list_local.ModifyStyle(FALSE, LVS_REPORT);
+ m_list_remote.ModifyStyle(FALSE, LVS_REPORT);
FixedLocalDriveList();
FixedRemoteDriveList();
/////////////////////////////////////////////
diff --git a/server/2015Remote/FileManagerDlg.h b/server/2015Remote/FileManagerDlg.h
index a2f10ad..860cbe1 100644
--- a/server/2015Remote/FileManagerDlg.h
+++ b/server/2015Remote/FileManagerDlg.h
@@ -6,6 +6,7 @@
#endif // _MSC_VER > 1000
#include "IOCPServer.h"
+#include "SortListCtrl.h"
#define CIOCPServer IOCPServer
@@ -120,8 +121,8 @@ public:
enum { IDD = IDD_FILE };
CComboBox m_Remote_Directory_ComboBox;
CComboBox m_Local_Directory_ComboBox;
- CListCtrl m_list_remote;
- CListCtrl m_list_local;
+ CSortListCtrl m_list_remote;
+ CSortListCtrl m_list_local;
//}}AFX_DATA
diff --git a/server/2015Remote/SortListCtrl.cpp b/server/2015Remote/SortListCtrl.cpp
new file mode 100644
index 0000000..0251556
--- /dev/null
+++ b/server/2015Remote/SortListCtrl.cpp
@@ -0,0 +1,34 @@
+#include "StdAfx.h"
+#include "SortListCtrl.h"
+
+BEGIN_MESSAGE_MAP(CSortListCtrl, CListCtrl)
+ ON_NOTIFY_REFLECT(LVN_COLUMNCLICK, CSortListCtrl::OnLvnColumnclick)
+END_MESSAGE_MAP()
+
+int CALLBACK ListCompare(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
+{
+ CSortListCtrl* This = (CSortListCtrl*)lParamSort;
+ CString item1 = This->GetItemText(lParam1, This->m_nSortedCol);
+ CString item2 = This->GetItemText(lParam2, This->m_nSortedCol);
+ int asc = This->m_bAsc ? 1 : -1;
+ int ret = item1.Compare(item2);
+ return ret * asc;
+}
+
+void CSortListCtrl::OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult)
+{
+ LPNMLISTVIEW pNMLV = reinterpret_cast(pNMHDR);
+
+ if(pNMLV->iSubItem == m_nSortedCol) {
+ m_bAsc = !m_bAsc;
+ } else {
+ m_bAsc = TRUE;
+ m_nSortedCol = pNMLV->iSubItem;
+ }
+
+ SortItemsEx(ListCompare, (DWORD_PTR)this);
+
+ UpdateData(FALSE);
+
+ *pResult = 0;
+}
diff --git a/server/2015Remote/SortListCtrl.h b/server/2015Remote/SortListCtrl.h
new file mode 100644
index 0000000..075c35a
--- /dev/null
+++ b/server/2015Remote/SortListCtrl.h
@@ -0,0 +1,19 @@
+#pragma once
+#include "afxcmn.h"
+#include
+
+class CSortListCtrl : public CListCtrl
+{
+public:
+ CSortListCtrl(void) : m_bAsc(false), m_nSortedCol(0){}
+
+ ~CSortListCtrl(void){}
+
+ // 鏄惁涓哄崌搴
+ bool m_bAsc;
+ // 褰撳墠鎺掑垪鐨勫簭
+ int m_nSortedCol;
+
+ afx_msg void OnLvnColumnclick(NMHDR *pNMHDR, LRESULT *pResult);
+ DECLARE_MESSAGE_MAP()
+};