From a91d1b68a51de3da8b6b3a420ce0f0e5bb61e056 Mon Sep 17 00:00:00 2001 From: Christoph von Wittich Date: Sat, 4 Apr 2015 18:51:28 +0000 Subject: [PATCH] [SHELL32] implement invert selection svn path=/trunk/; revision=67052 --- reactos/dll/win32/shell32/CDefView.cpp | 13 ++++++++++--- reactos/include/reactos/rosctrls.h | 5 +++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/shell32/CDefView.cpp b/reactos/dll/win32/shell32/CDefView.cpp index ccc3760c749..9bb4bb732a5 100644 --- a/reactos/dll/win32/shell32/CDefView.cpp +++ b/reactos/dll/win32/shell32/CDefView.cpp @@ -1554,9 +1554,10 @@ LRESULT CDefView::OnKillFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHa */ LRESULT CDefView::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled) { - DWORD dwCmdID; - DWORD dwCmd; - HWND hwndCmd; + DWORD dwCmdID; + DWORD dwCmd; + HWND hwndCmd; + int nCount; dwCmdID = GET_WM_COMMAND_ID(wParam, lParam); dwCmd = GET_WM_COMMAND_CMD(wParam, lParam); @@ -1605,6 +1606,12 @@ LRESULT CDefView::OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHand m_ListView.SetItemState(-1, LVIS_SELECTED, LVIS_SELECTED); break; + case FCIDM_SHVIEW_INVERTSELECTION: + nCount = m_ListView.GetItemCount(); + for (int i=0; i < nCount; i++) + m_ListView.SetItemState(i, m_ListView.GetItemState(i, LVIS_SELECTED) ? 0 : LVIS_SELECTED, LVIS_SELECTED); + break; + case FCIDM_SHVIEW_REFRESH: Refresh(); break; diff --git a/reactos/include/reactos/rosctrls.h b/reactos/include/reactos/rosctrls.h index e5282605b00..d3d75008333 100644 --- a/reactos/include/reactos/rosctrls.h +++ b/reactos/include/reactos/rosctrls.h @@ -165,6 +165,11 @@ public: spacing.cy = HIWORD(ret); } + UINT GetItemState(int i, UINT mask) + { + return SendMessage(LVM_GETITEMSTATE, i, (LPARAM)mask); + } + void SetItemState(int i, UINT state, UINT mask) { LV_ITEM item;