Exposing Owner-Drawn List Box Items

Application developers do not need to implement IAccessible to expose the items in an owner-drawn list box that has the style LBS_HASSTRINGS because Active Accessibility exposes the items in list boxes with this style. The items in an owner-drawn list box with the LBS_HASSTRINGS style are displayed as text. However, this style is also used with owner-drawn list boxes that do not display text so that the list box items are exposed by Active Accessibility.

To allow Active Accessibility to expose the items in an owner-drawn list box that does not display text:

  • Use the LBS_HASSTRINGS style when creating the list box.
  • Create a textual counterpart that names or describes each item in the list box.
  • When adding items to the owner-drawn list box, use the LB_ADDSTRING message to add the text that you want Active Accessibility to expose. This text is not displayed, so it is not part of the owner-drawn data. Add the owner-drawn item data using the LB_SETITEMDATA message.

When using the above method, note the following:

  • If you use the LBS_SORT style, the list box is sorted using the supplied strings and not the WM_COMPAREITEM callback procedure.
  • With owner-drawn variable list boxes created with the style LBS_OWNERDRAWVARIABLE, use a global variable or some other mechanism to keep track of when the itemData member of the MEASUREITEMSTRUCT is valid. The global variable is needed because the system sends the WM_MEASUREITEM message as soon as the string is added but before the item data is attached, and at this point the itemData member is not valid.
  • To change the string for an item in a list box with the LBS_HASSTRINGS style, delete the item with the LB_DELETESTRING message and add the new string with the LB_ADDSTRING message.