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.