Поиск CListCtrl, набрав: как показать, что было набрано? - PullRequest
0 голосов
/ 27 марта 2020

У меня есть CListCtrl в представлении отчета, и я заметил, что могу искать, набирая первые несколько букв элемента (элемент управления выбирает первый элемент, который соответствует типу ввода), и этот поиск «сбрасывается» через секунду или около того (поэтому, если я набрал «ab c», пауза, затем введите «d», тогда он ищет только «d»). Для удобства пользования я хочу, чтобы пользователь понял, что эта функция поиска по типу существует.

Итак, вот варианты, которые я могу придумать, в порядке предпочтения и вопрос, который у меня возникает в каждом случае:

  1. Использовать существующую встроенную поддержку в MF C.

    • Есть ли такая вещь?
  2. Некоторое другое решение, которое было реализовано ранее.

    • Опять же, есть ли такая вещь?
  3. Добавить еще одно текстовое поле в диалоговое окно и обрабатывает его сообщение ON_EN_CHANGE, чтобы каким-то образом вызывать поведение поиска CListCtrl. Другими словами, похоже на диалог поиска / панель инструментов в браузерах.

    • Как мне запустить режим поиска?

1 Ответ

0 голосов
/ 27 марта 2020

Взглянул на документацию по списку элементов управления в Microsoft Docs. Это поведение описано в Обработка сообщений просмотра списка по умолчанию (WM_CHAR сообщение). Строка поиска действительно сбрасывается через одну секунду.

Однако я не нашел ни одного уведомления, которое кажется относительным, например, возвращает текущую строку поиска, которую вы можете отобразить. Существует LVN_INCREMENTALSEARCH , но документация довольно запутанная (например, что такое «инкрементный поиск» и т. Д. c), и я не знаю, будете ли вы вообще получать это, так как Это похоже на элементы управления виртуальным списком. В любом случае, вы можете попробовать.

Но сброс теста, введенного пользователем всего за 1 сек c, может оказаться нежелательным для пользователей или рецензентов (на самом деле я никогда не видел, чтобы такое приложение). Таким образом, вы можете реализовать некоторую операцию «Поиск» в своем диалоговом окне, как вы сказали, добавить поле редактирования и искать его содержимое. Вы можете использовать сообщение LVM_FINDITEM (или макрос ListView_FindItem()), запрашивающее поиск частичного совпадения (LVFI_PARTIAL), или выполнить поиск самостоятельно (найдите соответствующий элемент и переместитесь туда).

...