diff --git a/server/2015Remote/2015Remote.rc b/server/2015Remote/2015Remote.rc index f12e98b..4a70581 100644 Binary files a/server/2015Remote/2015Remote.rc and b/server/2015Remote/2015Remote.rc differ diff --git a/server/2015Remote/2015RemoteDlg.cpp b/server/2015Remote/2015RemoteDlg.cpp index 1513fd4..0528ad1 100644 --- a/server/2015Remote/2015RemoteDlg.cpp +++ b/server/2015Remote/2015RemoteDlg.cpp @@ -304,6 +304,7 @@ CMy2015RemoteDlg::CMy2015RemoteDlg(CWnd* pParent): CDialogEx(CMy2015RemoteDlg::I m_bmOnline[10].LoadBitmap(IDB_BITMAP_AUTHORIZE); m_bmOnline[11].LoadBitmap(IDB_BITMAP_UNAUTH); m_bmOnline[12].LoadBitmap(IDB_BITMAP_ASSIGNTO); + m_bmOnline[13].LoadBitmap(IDB_BITMAP_ADDWATCH); for (int i = 0; i < PAYLOAD_MAXTYPE; i++) { m_ServerDLL[i] = nullptr; @@ -420,6 +421,9 @@ BEGIN_MESSAGE_MAP(CMy2015RemoteDlg, CDialogEx) ON_COMMAND(ID_TOOL_INPUT_PASSWORD, &CMy2015RemoteDlg::OnToolInputPassword) ON_COMMAND(ID_TOOL_GEN_SHELLCODE, &CMy2015RemoteDlg::OnToolGenShellcode) ON_COMMAND(ID_ONLINE_ASSIGN_TO, &CMy2015RemoteDlg::OnOnlineAssignTo) + ON_NOTIFY(NM_CUSTOMDRAW, IDC_MESSAGE, &CMy2015RemoteDlg::OnNMCustomdrawMessage) + ON_COMMAND(ID_ONLINE_ADD_WATCH, &CMy2015RemoteDlg::OnOnlineAddWatch) + ON_NOTIFY(NM_CUSTOMDRAW, IDC_ONLINE, &CMy2015RemoteDlg::OnNMCustomdrawOnline) END_MESSAGE_MAP() @@ -1281,6 +1285,7 @@ void CMy2015RemoteDlg::OnNMRClickOnline(NMHDR *pNMHDR, LRESULT *pResult) Menu.SetMenuItemBitmaps(ID_ONLINE_AUTHORIZE, MF_BYCOMMAND, &m_bmOnline[10], &m_bmOnline[10]); Menu.SetMenuItemBitmaps(ID_ONLINE_UNAUTHORIZE, MF_BYCOMMAND, &m_bmOnline[11], &m_bmOnline[11]); Menu.SetMenuItemBitmaps(ID_ONLINE_ASSIGN_TO, MF_BYCOMMAND, &m_bmOnline[12], &m_bmOnline[12]); + Menu.SetMenuItemBitmaps(ID_ONLINE_ADD_WATCH, MF_BYCOMMAND, &m_bmOnline[13], &m_bmOnline[13]); // 创建一个新的子菜单 CMenu newMenu; @@ -3024,3 +3029,68 @@ void CMy2015RemoteDlg::OnOnlineAssignTo() memcpy(bToken + 2 + dlg.m_str.GetLength() + 1, dlg.m_sSecondInput, dlg.m_sSecondInput.GetLength()); SendSelectedCommand(bToken, sizeof(bToken)); } + + +void CMy2015RemoteDlg::OnNMCustomdrawMessage(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); + 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 0000000..43f9e59 Binary files /dev/null and b/server/2015Remote/res/Bitmap/AddWatch.bmp differ diff --git a/server/2015Remote/resource.h b/server/2015Remote/resource.h index da774cf..151f5a0 100644 Binary files a/server/2015Remote/resource.h and b/server/2015Remote/resource.h differ