comctl32: implement TCM_REMOVEIMAGE (try2)

Nikolay Sivov bunglehead at gmail.com
Sun Mar 22 23:52:12 CDT 2009


Changelog:
   - try2: fix for several items with a same image case
   - implement TCM_REMOVEIMAGE

>From 0d58912d9351739f41c42ddd2b56a49902b4db63 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <bunglehead at gmail.com>
Date: Mon, 23 Mar 2009 00:49:39 -0400
Subject: Implement TCM_REMOVEIMAGE

---
 dlls/comctl32/tab.c |   25 ++++++++++++++++++++++---
 1 files changed, 22 insertions(+), 3 deletions(-)

diff --git a/dlls/comctl32/tab.c b/dlls/comctl32/tab.c
index 3880ceb..87f8015 100644
--- a/dlls/comctl32/tab.c
+++ b/dlls/comctl32/tab.c
@@ -53,7 +53,6 @@
  *   TCN_KEYDOWN
  *
  *  Messages:
- *   TCM_REMOVEIMAGE
  *   TCM_DESELECTALL
  *   TCM_GETEXTENDEDSTYLE
  *   TCM_SETEXTENDEDSTYLE
@@ -3099,6 +3098,27 @@ TAB_SetItemExtra (TAB_INFO *infoPtr, INT cbInfo)
   return TRUE;
 }
 
+static LRESULT TAB_RemoveImage (TAB_INFO *infoPtr, INT image)
+{
+  if (!infoPtr)
+    return 0;
+
+  if (ImageList_Remove (infoPtr->himl, image))
+  {
+    INT i;
+    RECT r;
+
+    /* shift indices, get item to repaint */
+    for (i = 0; i < infoPtr->uNumItem; i++)
+      if (infoPtr->items[i].iImage >= image && infoPtr->items[i].iImage-- == image)
+        /* repaint item */
+        if (TAB_InternalGetItemRect (infoPtr, i, &r, NULL))
+          InvalidateRect (infoPtr->hwnd, &r, TRUE);
+  }
+
+  return 0;
+}
+
 static LRESULT WINAPI
 TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
 {
@@ -3159,8 +3179,7 @@ TAB_WindowProc (HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
       return TAB_SetItemSize (infoPtr, lParam);
 
     case TCM_REMOVEIMAGE:
-      FIXME("Unimplemented msg TCM_REMOVEIMAGE\n");
-      return 0;
+      return TAB_RemoveImage (infoPtr, wParam);
 
     case TCM_SETPADDING:
       return TAB_SetPadding (infoPtr, lParam);
-- 
1.5.6.5





More information about the wine-patches mailing list