feature: Add sorting feature for online list #41
This commit is contained in:
@@ -154,6 +154,7 @@ BEGIN_MESSAGE_MAP(CMy2015RemoteDlg, CDialogEx)
|
|||||||
ON_WM_TIMER()
|
ON_WM_TIMER()
|
||||||
ON_WM_CLOSE()
|
ON_WM_CLOSE()
|
||||||
ON_NOTIFY(NM_RCLICK, IDC_ONLINE, &CMy2015RemoteDlg::OnNMRClickOnline)
|
ON_NOTIFY(NM_RCLICK, IDC_ONLINE, &CMy2015RemoteDlg::OnNMRClickOnline)
|
||||||
|
ON_NOTIFY(HDN_ITEMCLICK, 0, &CMy2015RemoteDlg::OnHdnItemclickList)
|
||||||
ON_COMMAND(ID_ONLINE_MESSAGE, &CMy2015RemoteDlg::OnOnlineMessage)
|
ON_COMMAND(ID_ONLINE_MESSAGE, &CMy2015RemoteDlg::OnOnlineMessage)
|
||||||
ON_COMMAND(ID_ONLINE_DELETE, &CMy2015RemoteDlg::OnOnlineDelete)
|
ON_COMMAND(ID_ONLINE_DELETE, &CMy2015RemoteDlg::OnOnlineDelete)
|
||||||
ON_COMMAND(ID_ONLINE_UPDATE, &CMy2015RemoteDlg::OnOnlineUpdate)
|
ON_COMMAND(ID_ONLINE_UPDATE, &CMy2015RemoteDlg::OnOnlineUpdate)
|
||||||
@@ -633,6 +634,48 @@ void CMy2015RemoteDlg::Release(){
|
|||||||
timeEndPeriod(1);
|
timeEndPeriod(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int CALLBACK CMy2015RemoteDlg::CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort) {
|
||||||
|
auto* pSortInfo = reinterpret_cast<std::pair<int, bool>*>(lParamSort);
|
||||||
|
int nColumn = pSortInfo->first;
|
||||||
|
bool bAscending = pSortInfo->second;
|
||||||
|
|
||||||
|
// <20><>ȡ<EFBFBD><C8A1>ֵ
|
||||||
|
CONTEXT_OBJECT* context1 = (CONTEXT_OBJECT*)lParam1;
|
||||||
|
CONTEXT_OBJECT* context2 = (CONTEXT_OBJECT*)lParam2;
|
||||||
|
CString s1 = context1->GetClientData(nColumn);
|
||||||
|
CString s2 = context2->GetClientData(nColumn);
|
||||||
|
|
||||||
|
int result = s1 > s2 ? 1 : -1;
|
||||||
|
return bAscending ? result : -result;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMy2015RemoteDlg::SortByColumn(int nColumn) {
|
||||||
|
static int m_nSortColumn = 0;
|
||||||
|
static bool m_bSortAscending = false;
|
||||||
|
if (nColumn == m_nSortColumn) {
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͬһ<CDAC>У<EFBFBD><D0A3>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD>˳<EFBFBD><CBB3>
|
||||||
|
m_bSortAscending = !m_bSortAscending;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD><D0BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>в<EFBFBD><D0B2><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>
|
||||||
|
m_nSortColumn = nColumn;
|
||||||
|
m_bSortAscending = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
|
||||||
|
std::pair<int, bool> sortInfo(m_nSortColumn, m_bSortAscending);
|
||||||
|
EnterCriticalSection(&m_cs);
|
||||||
|
m_CList_Online.SortItems(CompareFunction, reinterpret_cast<LPARAM>(&sortInfo));
|
||||||
|
LeaveCriticalSection(&m_cs);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CMy2015RemoteDlg::OnHdnItemclickList(NMHDR* pNMHDR, LRESULT* pResult) {
|
||||||
|
LPNMHEADER pNMHeader = reinterpret_cast<LPNMHEADER>(pNMHDR);
|
||||||
|
int nColumn = pNMHeader->iItem; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
SortByColumn(nColumn); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
*pResult = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void CMy2015RemoteDlg::OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult)
|
void CMy2015RemoteDlg::OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -43,6 +43,9 @@ protected:
|
|||||||
afx_msg HCURSOR OnQueryDragIcon();
|
afx_msg HCURSOR OnQueryDragIcon();
|
||||||
DECLARE_MESSAGE_MAP()
|
DECLARE_MESSAGE_MAP()
|
||||||
public:
|
public:
|
||||||
|
void SortByColumn(int nColumn);
|
||||||
|
afx_msg VOID OnHdnItemclickList(NMHDR* pNMHDR, LRESULT* pResult);
|
||||||
|
static int CALLBACK CompareFunction(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort);
|
||||||
|
|
||||||
VOID InitControl(); //<2F><>ʼ<EFBFBD>ؼ<EFBFBD>
|
VOID InitControl(); //<2F><>ʼ<EFBFBD>ؼ<EFBFBD>
|
||||||
VOID TestOnline(); //<2F><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>
|
VOID TestOnline(); //<2F><><EFBFBD>Ժ<EFBFBD><D4BA><EFBFBD>
|
||||||
|
|||||||
@@ -53,6 +53,9 @@ typedef struct _CONTEXT_OBJECT
|
|||||||
sClientInfo[i] = s[i];
|
sClientInfo[i] = s[i];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
CString GetClientData(int index) const{
|
||||||
|
return sClientInfo[index];
|
||||||
|
}
|
||||||
}CONTEXT_OBJECT,*PCONTEXT_OBJECT;
|
}CONTEXT_OBJECT,*PCONTEXT_OBJECT;
|
||||||
|
|
||||||
typedef CList<PCONTEXT_OBJECT> ContextObjectList;
|
typedef CList<PCONTEXT_OBJECT> ContextObjectList;
|
||||||
|
|||||||
Reference in New Issue
Block a user