From 48577fd44aafb7a4acd8a8480ca820555ed64c2d Mon Sep 17 00:00:00 2001 From: yuanyuanxiang <962914132@qq.com> Date: Sat, 26 Jul 2025 19:58:05 +0800 Subject: [PATCH] Feature: Support adding client to watch list --- server/2015Remote/2015Remote.rc | Bin 90960 -> 91256 bytes server/2015Remote/2015RemoteDlg.cpp | 70 ++++++++++++++++++ server/2015Remote/2015RemoteDlg.h | 19 ++++- server/2015Remote/2015Remote_vs2015.vcxproj | 1 + .../2015Remote_vs2015.vcxproj.filters | 1 + server/2015Remote/res/Bitmap/AddWatch.bmp | Bin 0 -> 822 bytes server/2015Remote/resource.h | Bin 45542 -> 45820 bytes 7 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 server/2015Remote/res/Bitmap/AddWatch.bmp diff --git a/server/2015Remote/2015Remote.rc b/server/2015Remote/2015Remote.rc index f12e98b479f9c14b328e802d4a9aed161f3e6fcc..4a705813068526a2e2152378e15e27fa1e215d03 100644 GIT binary patch delta 117 zcmca`jP=I})`l&N5{w+ba~A{^2foOeuE5A>H9dfxkx$T(!37B88NwMH8A2GG89b&p ziZNM{y%|6s(pNMHDR); + *pResult = 0; + + switch (pLVCD->nmcd.dwDrawStage) + { + case CDDS_PREPAINT: + *pResult = CDRF_NOTIFYITEMDRAW; + return; + + case CDDS_ITEMPREPAINT:{ + int nRow = static_cast(pLVCD->nmcd.dwItemSpec); + int nLastRow = m_CList_Message.GetItemCount() - 1; + if (nRow == nLastRow && nLastRow >= 0){ + pLVCD->clrText = RGB(255, 0, 0); + } + } + } +} + + +void CMy2015RemoteDlg::OnOnlineAddWatch() +{ + EnterCriticalSection(&m_cs); + POSITION Pos = m_CList_Online.GetFirstSelectedItemPosition(); + while (Pos) + { + int iItem = m_CList_Online.GetNextSelectedItem(Pos); + context* ctx = (context*)m_CList_Online.GetItemData(iItem); + auto f = m_ClientMap.find(ctx->GetClientID()); + int r = f != m_ClientMap.end() ? f->second.GetLevel() : 0; + m_ClientMap[ctx->GetClientID()].UpdateLevel(++r >= 4 ? 0 : r); + } + SaveToFile(m_ClientMap, GetDbPath()); + LeaveCriticalSection(&m_cs); +} + + +void CMy2015RemoteDlg::OnNMCustomdrawOnline(NMHDR* pNMHDR, LRESULT* pResult) +{ + LPNMLVCUSTOMDRAW pLVCD = reinterpret_cast(pNMHDR); + *pResult = 0; + + switch (pLVCD->nmcd.dwDrawStage) + { + case CDDS_PREPAINT: + *pResult = CDRF_NOTIFYITEMDRAW; + return; + + case CDDS_ITEMPREPAINT:{ + int nRow = static_cast(pLVCD->nmcd.dwItemSpec); + EnterCriticalSection(&m_cs); + context* ctx = (context*)m_CList_Online.GetItemData(nRow); + auto f = m_ClientMap.find(ctx->GetClientID()); + int r = f != m_ClientMap.end() ? f->second.GetLevel() : 0; + LeaveCriticalSection(&m_cs); + if (r >= 1) pLVCD->clrText = RGB(0, 0, 255); // 字体蓝 + if (r >= 2) pLVCD->clrText = RGB(255, 0, 0); // 字体红 + if (r >= 3) pLVCD->clrTextBk = RGB(255, 160, 160); // 背景红 + } + } +} diff --git a/server/2015Remote/2015RemoteDlg.h b/server/2015Remote/2015RemoteDlg.h index 54b4d33..ce4e1c4 100644 --- a/server/2015Remote/2015RemoteDlg.h +++ b/server/2015Remote/2015RemoteDlg.h @@ -30,13 +30,15 @@ typedef struct DllInfo { enum { MAP_NOTE, MAP_LOCATION, + MAP_LEVEL, }; struct _ClientValue { char Note[64]; char Location[64]; - char Reserved[128]; // Ԥ + char Level; + char Reserved[127]; // Ԥ _ClientValue() { memset(this, 0, sizeof(_ClientValue)); } @@ -51,12 +53,18 @@ struct _ClientValue void UpdateLocation(const CString& loc) { strcpy_s(Location, loc.GetString()); } + void UpdateLevel(int level) { + Level = level; + } const char* GetNote() const { return Note; } const char* GetLocation() const { return Location; } + int GetLevel() const { + return Level; + } int GetLength() const { return sizeof(_ClientValue); } @@ -105,7 +113,7 @@ protected: break; } } - EnterCriticalSection(&m_cs); + LeaveCriticalSection(&m_cs); return r; } void SetClientMapData(ClientKey key, int typ, const char* value) { @@ -121,7 +129,7 @@ protected: default: break; } - EnterCriticalSection(&m_cs); + LeaveCriticalSection(&m_cs); } // public: @@ -196,7 +204,7 @@ public: CRITICAL_SECTION m_cs; BOOL isClosed; CMenu m_MainMenu; - CBitmap m_bmOnline[13]; + CBitmap m_bmOnline[14]; uint64_t m_superID; bool CheckValid(int trail = 14); afx_msg void OnTimer(UINT_PTR nIDEvent); @@ -269,4 +277,7 @@ public: afx_msg LRESULT OnShowMessage(WPARAM wParam, LPARAM lParam); afx_msg void OnToolGenShellcode(); afx_msg void OnOnlineAssignTo(); + afx_msg void OnNMCustomdrawMessage(NMHDR* pNMHDR, LRESULT* pResult); + afx_msg void OnOnlineAddWatch(); + afx_msg void OnNMCustomdrawOnline(NMHDR* pNMHDR, LRESULT* pResult); }; diff --git a/server/2015Remote/2015Remote_vs2015.vcxproj b/server/2015Remote/2015Remote_vs2015.vcxproj index b5882f8..86b53da 100644 --- a/server/2015Remote/2015Remote_vs2015.vcxproj +++ b/server/2015Remote/2015Remote_vs2015.vcxproj @@ -389,6 +389,7 @@ + diff --git a/server/2015Remote/2015Remote_vs2015.vcxproj.filters b/server/2015Remote/2015Remote_vs2015.vcxproj.filters index 6f4a66a..7ff3b73 100644 --- a/server/2015Remote/2015Remote_vs2015.vcxproj.filters +++ b/server/2015Remote/2015Remote_vs2015.vcxproj.filters @@ -154,6 +154,7 @@ + diff --git a/server/2015Remote/res/Bitmap/AddWatch.bmp b/server/2015Remote/res/Bitmap/AddWatch.bmp new file mode 100644 index 0000000000000000000000000000000000000000..43f9e59abb469a4808374a19d651ffa4cbe3c3e3 GIT binary patch literal 822 zcma)$KT8BL5XB>Y0ZYp(Ew?%>gT1ij*`;%_F(CK{4h*7lAVLI@tz-&|g98~5!7?8q z<&|5>l_{@_bDMQo%oc{1;broBlN=n5w?(_gRQG7_bbCwewtdmvr$ef79dbRszK;qy z(bN1Y@7%nAEY+xX#lAc`yUu}rXL|ckDm?;Ud<6wqR=R)7URO$$a-&Mg8AultdOfpH zTV~jtpB_6fp@FajoLi-}s*zw@12b%%?yj&lF}k>RF_1h(wAK~|U`jpTUo;+LY+8AW zgeB6)(m)};d2%wJ3uyTeBdMWR=vR7D{^2=DyqiPp7QNyf8f$a{`jsF0SiCvJu<~K$ z99na!c(@QJJehei4gtY}H3&e!uL!2Ki6r$Sxo?@_`GYVuDZ({pxRbCx$sJ|}%|Efh HY-;`hLFQxz literal 0 HcmV?d00001 diff --git a/server/2015Remote/resource.h b/server/2015Remote/resource.h index da774cf6e3697d561156b8027c8f76df7576c422..151f5a064746c0aa7720c0e3c1d5fe206c339f48 100644 GIT binary patch delta 157 zcmaF%nCZ_`rVUT5C)?S0O}-Gs#_hu3!Vu2j$PmKdJo(~u<%thCCa>5aHF*NF7_TEx z3RzMXEK?xDvAM_QThZhlCSsEVmI|?2G8i%#OuVQ(*h$K($JESsO%d@I^KV}lms_zl98CZK