Commit 76cb9c0d authored by Nikolay Sivov's avatar Nikolay Sivov Committed by Alexandre Julliard

comctl32/listview: Implement LVM_ISITEMVISIBLE.

parent 9c565342
......@@ -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: */
......
......@@ -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)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment