[2/7] comctl32/listview: Implement LVM_ISITEMVISIBLE
Nikolay Sivov
bunglehead at gmail.com
Sun Jun 21 17:50:04 CDT 2009
Changelog:
- Implement LVM_ISITEMVISIBLE
>From 2ae69a864c3b465083252a78b792ace274499073 Mon Sep 17 00:00:00 2001
From: Nikolay Sivov <bunglehead at gmail.com>
Date: Sat, 20 Jun 2009 02:28:20 +0400
Subject: Implement LVM_ISITEMVISIBLE
---
dlls/comctl32/listview.c | 41 +++++++++++++++++++++++++++++++++++++++++
include/commctrl.h | 1 +
2 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/dlls/comctl32/listview.c b/dlls/comctl32/listview.c
index 9e43444..c56d294 100644
--- a/dlls/comctl32/listview.c
+++ b/dlls/comctl32/listview.c
@@ -6946,6 +6946,44 @@ fail:
/***
* DESCRIPTION:
+ * Checks item visibility.
+ *
+ * PARAMETER(S):
+ * [I] infoPtr : valid pointer to the listview structure
+ * [I] nFirst : item index to check for
+ *
+ * RETURN:
+ * Item visible : TRUE
+ * Item invisible or failure : FALSE
+ */
+static BOOL LISTVIEW_IsItemVisible(const LISTVIEW_INFO *infoPtr, INT nItem)
+{
+ POINT Origin, Position;
+ RECT rcItem;
+ HDC hdc;
+ BOOL ret;
+
+ TRACE("nItem=%d\n", nItem);
+
+ if (nItem < 0 || nItem >= DPA_GetPtrCount(infoPtr->hdpaItems)) return FALSE;
+
+ LISTVIEW_GetOrigin(infoPtr, &Origin);
+ LISTVIEW_GetItemOrigin(infoPtr, nItem, &Position);
+ rcItem.left = Position.x + Origin.x;
+ rcItem.top = Position.y + Origin.y;
+ rcItem.right = rcItem.left + infoPtr->nItemWidth;
+ rcItem.bottom = rcItem.top + infoPtr->nItemHeight;
+
+ hdc = GetDC(infoPtr->hwndSelf);
+ if (!hdc) return FALSE;
+ ret = RectVisible(hdc, &rcItem);
+ ReleaseDC(infoPtr->hwndSelf, hdc);
+
+ return ret;
+}
+
+/***
+ * DESCRIPTION:
* Redraws a range of items.
*
* PARAMETER(S):
@@ -10340,6 +10378,9 @@ LISTVIEW_WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
/* case LVM_ISGROUPVIEWENABLED: */
+ case LVM_ISITEMVISIBLE:
+ return LISTVIEW_IsItemVisible(infoPtr, (INT)wParam);
+
/* case LVM_MAPIDTOINDEX: */
/* case LVM_MAPINDEXTOID: */
diff --git a/include/commctrl.h b/include/commctrl.h
index b064c01..6eb5f32 100644
--- a/include/commctrl.h
+++ b/include/commctrl.h
@@ -3252,6 +3252,7 @@ static const WCHAR WC_LISTVIEWW[] = { 'S','y','s',
#define LVM_CANCELEDITLABEL (LVM_FIRST + 179)
#define LVM_MAPINDEXTOID (LVM_FIRST + 180)
#define LVM_MAPIDTOINDEX (LVM_FIRST + 181)
+#define LVM_ISITEMVISIBLE (LVM_FIRST + 182)
#define LVN_FIRST (0U-100U)
#define LVN_LAST (0U-199U)
--
1.5.6.5
More information about the wine-patches
mailing list