Eric Wheeler : comctl32/listview: Add Get/SetSelectedColumn() support.

Alexandre Julliard julliard at winehq.org
Mon Sep 7 16:12:55 CDT 2020


Module: wine
Branch: master
Commit: 578aae071b070519c0a1c6836c67954a5114ef96
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=578aae071b070519c0a1c6836c67954a5114ef96

Author: Eric Wheeler <wine at linux.ewheeler.net>
Date:   Mon Sep  7 13:04:40 2020 +0300

comctl32/listview: Add Get/SetSelectedColumn() support.

Selected column should be using different background color,
this patch does not implement this.

Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/comctl32/listview.c       | 10 +++++++---
 dlls/comctl32/tests/listview.c | 37 +++++++++++++++++++++++++++++++++++++
 2 files changed, 44 insertions(+), 3 deletions(-)

diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index dba16d13a4..e31c787c4a 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -99,7 +99,6 @@
  *   -- LVM_GETINSERTMARKRECT
  *   -- LVM_GETNUMBEROFWORKAREAS
  *   -- LVM_GETOUTLINECOLOR, LVM_SETOUTLINECOLOR
- *   -- LVM_GETSELECTEDCOLUMN, LVM_SETSELECTEDCOLUMN
  *   -- LVM_GETISEARCHSTRINGW, LVM_GETISEARCHSTRINGA
  *   -- LVM_GETTILEINFO, LVM_SETTILEINFO
  *   -- LVM_GETTILEVIEWINFO, LVM_SETTILEVIEWINFO
@@ -248,6 +247,7 @@ typedef struct tagLISTVIEW_INFO
   /* columns */
   HDPA hdpaColumns;		/* array of COLUMN_INFO pointers */
   BOOL colRectsDirty;		/* trigger column rectangles requery from header */
+  INT selected_column;          /* index for LVM_SETSELECTEDCOLUMN/LVM_GETSELECTEDCOLUMN */
 
   /* item metrics */
   BOOL bNoItemMetrics;		/* flags if item metrics are not yet computed */
@@ -9506,6 +9506,7 @@ static LRESULT LISTVIEW_NCCreate(HWND hwnd, WPARAM wParam, const CREATESTRUCTW *
   infoPtr->itemEdit.fEnabled = FALSE;
   infoPtr->iVersion = COMCTL32_VERSION;
   infoPtr->colRectsDirty = FALSE;
+  infoPtr->selected_column = -1;
 
   /* get default font (icon title) */
   SystemParametersInfoW(SPI_GETICONTITLELOGFONT, 0, &logFont, 0);
@@ -11465,7 +11466,8 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
   /* case LVM_GETOUTLINECOLOR: */
 
-  /* case LVM_GETSELECTEDCOLUMN: */
+  case LVM_GETSELECTEDCOLUMN:
+    return infoPtr->selected_column;
 
   case LVM_GETSELECTEDCOUNT:
     return LISTVIEW_GetSelectedCount(infoPtr);
@@ -11638,7 +11640,9 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 
   /* case LVM_SETOUTLINECOLOR: */
 
-  /* case LVM_SETSELECTEDCOLUMN: */
+  case LVM_SETSELECTEDCOLUMN:
+    infoPtr->selected_column = (INT)wParam;
+    return TRUE;
 
   case LVM_SETSELECTIONMARK:
     return LISTVIEW_SetSelectionMark(infoPtr, (INT)lParam);
diff --git a/dlls/comctl32/tests/listview.c b/dlls/comctl32/tests/listview.c
index a9b853eda8..500cc363c2 100644
--- a/dlls/comctl32/tests/listview.c
+++ b/dlls/comctl32/tests/listview.c
@@ -6659,6 +6659,42 @@ static void test_item_state_change(void)
     }
 }
 
+static void test_selected_column(void)
+{
+    static const DWORD styles[] = { LVS_ICON, LVS_LIST, LVS_REPORT, LVS_SMALLICON };
+    int ret, i;
+    HWND hwnd;
+
+    for (i = 0; i < ARRAY_SIZE(styles); ++i)
+    {
+        hwnd = create_listview_control(styles[i]);
+
+        /* Initial value */
+        ret = SendMessageA(hwnd, LVM_GETSELECTEDCOLUMN, 0, 0);
+        ok(ret == -1, "Unexpected column %d.\n", ret);
+
+        ret = SendMessageA(hwnd, LVM_SETSELECTEDCOLUMN, -100, 0);
+        ok(ret == 1, "Unexpected return value %d.\n", ret);
+
+        ret = SendMessageA(hwnd, LVM_GETSELECTEDCOLUMN, 0, 0);
+        ok(ret == -100, "Unexpected column %d.\n", ret);
+
+        ret = SendMessageA(hwnd, LVM_SETSELECTEDCOLUMN, 100, 0);
+        ok(ret == 1, "Unexpected return value %d.\n", ret);
+
+        ret = SendMessageA(hwnd, LVM_GETSELECTEDCOLUMN, 0, 0);
+        ok(ret == 100, "Unexpected column %d.\n", ret);
+
+        ret = SendMessageA(hwnd, LVM_SETSELECTEDCOLUMN, -1, 0);
+        ok(ret == 1, "Unexpected return value %d.\n", ret);
+
+        ret = SendMessageA(hwnd, LVM_GETSELECTEDCOLUMN, 0, 0);
+        ok(ret == -1, "Unexpected column %d.\n", ret);
+
+        DestroyWindow(hwnd);
+    }
+}
+
 START_TEST(listview)
 {
     ULONG_PTR ctx_cookie;
@@ -6766,6 +6802,7 @@ START_TEST(listview)
     test_LVN_ENDLABELEDIT();
     test_LVM_GETCOUNTPERPAGE();
     test_item_state_change();
+    test_selected_column();
 
     unload_v6_module(ctx_cookie, hCtx);
 




More information about the wine-cvs mailing list