Как добавить фильтрацию данных с помощью CListCtrl и CHeaderCtrl - PullRequest
2 голосов
/ 14 февраля 2009

Фон
Приложения, которые управляют сбором данных, обычно представлены с использованием сетки, содержащей заголовок. Эти же приложения обычно включают в себя фильтр, позволяющий пользователю сузить набор данных (Excel - прекрасный пример. Есть много других). В моем приложении MFC я пытаюсь сделать то же самое, используя комбинацию CListCtrl и CHeaderCtrl. Эта комбинация уже позволила моему приложению обеспечить сортировку по нескольким столбцам, включая использование возможностей изображения отдельных элементов заголовка для представления сортировки по возрастанию / убыванию.

Я использовал свое лучшее Google-фу, чтобы найти примеры, где CHeaderCtrl был расширен / настроен для включения пользовательского чертежа, чтобы учесть добавление кнопки фильтра и отображение связанного выпадающего меню для ввода пользователем критериев фильтра при нажатии.

Вопрос (ы) :

  1. Есть ли примеры, которые я пропустил?
  2. Если через Интернет нет примеров, какой подход (ы) я должен рассмотреть при настройке CListCtrl и CHeaderCtrl для достижения моей цели?

Дополнительные комментарии:
Один из ответов ссылался на встроенную функциональность FilterBar. Да, я видел это, но это не то, что я ищу. Я хочу специально эмулировать нестатические, не визуально навязчивые возможности фильтрации в Excel и других приложениях с фильтрами.

Ответы [ 2 ]

1 голос
/ 14 февраля 2009

Мой Google-фу подтверждает ваш, никаких примеров, которые добавляют неинвазивный интерфейс фильтра к CListCtrl, с CHeaderCtrl.

или без него.

Простой подход
В вашем HDN_ITEMCLICK обработчике отметьте ((NMHEADER)lParam).iButton. Для iButton == 1 это правая кнопка мыши. Вот ваш шанс показать небольшой CWnd пользовательский интерфейс фильтра. Проблема с этим подходом в том, что нет визуальной индикации того, что щелчок правой кнопкой мыши вызовет меню фильтра.

Сложнее
Создайте три изображения заголовка столбца - значок фильтра, стрелка вверх + значок фильтра, стрелка вниз + значок фильтра. Если столбец не отсортирован, покажите изображение только для фильтра, в противном случае используйте соответствующую стрелку + изображение фильтра. Нажмите ручку на CListCtrl на уровне NM_RCLICK, чтобы получить информацию о координатах ( пример .) Выполните некоторую геометрию, чтобы выяснить, был ли щелчок на значке фильтра, если да, покажите немного CWnd -обработан фильтр UI. Вы можете стать еще интереснее и показать текущий фильтр во всплывающих подсказках, создать больше изображений с цветными фильтрами, чтобы показать, когда фильтр активен.

0 голосов
/ 14 февраля 2009

это , что вы ищете?

Так как это на другом языке, я дал googled адрес. См второй результат.

...