Предоставление Owner-Drawn элементов поля со списком

Разработчикам приложений не нужно реализовывать IAccessible для предоставления элементов в поле со списком, нарисованном владельцем, которое имеет стиль CBS_HASSTRINGS так как Microsoft Active Accessibility предоставляет элементы в полях со списком с этим стилем. Элементы в поле со списком, нарисованном владельцем, с CBS_HASSTRINGS стилем отображаются в виде текста. Однако этот стиль также используется с полями со списком, нарисованными владельцем, в которых текст не отображается, чтобы элементы полей со списком предоставлялись с помощью Microsoft Active Accessibility.

Чтобы разрешить Microsoft Active Accessibility предоставлять элементы в поле со списком, нарисованном владельцем, в котором не отображается текст, выполните следующие действия.

  • Используйте стиль CBS_HASSTRINGS при создании поля со списком.
  • Создайте текстовый аналог, который называет или описывает каждый элемент в поле со списком.
  • При добавлении элементов в поле со списком, нарисованное владельцем, используйте сообщение CB_ADDSTRING, чтобы добавить текст, который требуется предоставить Microsoft Active Accessibility. Этот текст не отображается, поэтому он не должен быть частью данных, отрисованных владельцем. Добавьте данные элемента, нарисованные владельцем, с помощью сообщения CB_SETITEMDATA.

При использовании приведенного выше метода обратите внимание на следующее:

  • При использовании стиля CBS_SORT поле со списком сортируется с использованием предоставленных строк, а не процедуры обратного вызова WM_COMPAREITEM .
  • В полях со списком, нарисованных владельцем, созданных со стилем CBS_OWNERDRAWVARIABLE, используйте глобальную переменную или другой механизм для отслеживания допустимости элемента itemDataобъекта MEASUREITEMSTRUCT . Глобальная переменная является обязательной, так как система отправляет сообщение WM_MEASUREITEM сразу после добавления строки, но перед присоединением данных элемента, и на этом этапе член itemData недопустим.
  • Чтобы изменить строку для элемента в поле со списком со стилем CBS_HASSTRINGS , удалите элемент с сообщением CB_DELETESTRING и добавьте новую строку с сообщением CB_ADDSTRING .