имеется список (DI_LISTBOX)
имеется "хитрый" критерий фильтрации пунктов списка (например, реализованный в функции
GetVisible
)Требуется установить этот фильтр.
Я знаю два способа решения:
1. Для каждого j-го элемента выставлять или гасить флаг LIF_HIDDEN в зависимости от результата
GetVisible
и обновлять его посылкой DM_LISTUPDATE с параметром {Index=j, Flags=<сформированный влаг>}.2. Для всех элементов списка DI_LISTBOX[6] выставить соответствующие флаги и затем вызвать DM_LISTSET сразу для всех элементов списка.
Второй подход мне не хотелось бы применять, т.к. при этом требуется сформировать ПОЛНЫЙ элемент списка, в т.ч. и те поля, которые не изменяются. Кроме того, при этом теряются некоторые параметры, которые были установлены при формировании диалога (например, Source)
Первый подход плох тем, что на экране отображается процесс показа/сокрытия пунктов списка. И это, к тому же, замедляет установку фильтра.
В связи с этим вопрос:
Есть ли аналог пары BeginUpdate / EndUpdate? Было бы очень кузяво …
Если нет - имеет ли смысл заносить в "хотелки"?
Вариант решения: Если бы Menu.FilterStr умел принимать не одну строку, а, например, список видимых (или НЕвидимых) через '\n', или таблицу вместо строки - это тоже решило бы задачу. Но, насколько я понимаю, такого сервиса нету.