HOWTO: Determine the Number of Visible Items in a List Box

ID: Q78952


The information in this article applies to:


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:

Sample Code


   int ntop, nCount, nRectheight, nVisibleItems;
   RECT rc, itemrect;

   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.
      } 


Keywords          : kbCtrl kbListBox kbGrpUser 
Version           : 
Platform          : 
Issue type        : kbhowto 

Last Reviewed: March 7, 1999