INF: Determining the Number of Visible Items in a List Box

ID Number: Q78952

3.00

WINDOWS

Summary:

To determine the number of items that are currently visible in a list

box, an application must consider the following cases:

1. There are many items in the list box (some items are not visible).

2. There are few items in the list box (the bottom area of the list

box is empty).

3. The heights of the items may vary (an owner-draw list box or use of

a font other than the system default).

More Information:

The following code segment can be used to determine the number of

items visible in a list box:

int ntop, nCount, nRectheight, nVisibleItems;

RECT rc;

ntop = SendMessage(hwndList, LB_GETTOPINDEX, 0, 0);

// Top item index.

nCount = SendMessage(hwndList, LB_GETCOUNT, 0, 0);

// Number of total items.

GetClientRect(hwndList, &rc);

// Get list box rectangle.

nRectheight = rc.bottom - rc.top;

// Compute list box height.

nVisibleItems = 0; // Initialize counter.

while ((nRectheight > 0) && (ntop < nCount))

// Loop until the bottom of the list box

// or the last item has been reached.

{

SendMessage(hwndList, LB_GETITEMRECT, ntop, (DWORD)(&itemrect));

// Get current line's rectangle.

nRectheight = nRectheight - (itemrect.bottom - itemrect.top);

// Subtract current line height.

nVisibleItems++; // Increase item count.

ntop++; // Move to the next line.

}