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() +};