В комментарии к этот ответ советует вам нарисовать список элементов, которые вы говорите:
Мне интересно, почему я должен это делать, когда требуемая функциональность уже существует в списке
Поле со списком на самом деле состоит из трех собственных дочерних окон - самого поля со списком, встроенного редактирования и списка. Вы можете использовать функцию GetComboBoxInfo()
, чтобы заполнить структуру COMBOBOXINFO
(т.е. запись TComboBoxInfo
) информацией об элементе управления, и она вернет 3 HWND
элементы в нем. При этом вы можете изменить внешний вид и поведение списка. В принципе.
Чтобы в окне списка использовались табуляции, необходимо установить флаг стиля LBS_USETABSTOPS
. К сожалению, это не может быть включено позже, список должен быть создан с ним. Таким образом, вы можете использовать эту функциональность только в том случае, если сможете включить флаг стиля для списка, который создается во время вызова CreateWindowEx()
для поля со списком. AFAICS это можно сделать только путем перехвата самого вызова CreateWindowEx()
, определения внутреннего вызова, создающего окно списка, и изменения переданного стиля. Это означает изменение кода во время выполнения, причем не в вашем исполняемом файле, а в Windows DLL.
Рисование элементов списка владельцем выглядит так, как будто это будет намного проще.