comctl32/listview: Implement LVM_ISITEMVISIBLE.

This commit is contained in:
Nikolay Sivov 2009-06-20 02:28:20 +04:00 committed by Alexandre Julliard
parent 9c565342d0
commit 76cb9c0d77
2 changed files with 42 additions and 0 deletions

View File

@ -6944,6 +6944,44 @@ fail:
return -1;
}
/***
* 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.
@ -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: */

View File

@ -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)