Связывание MFC CListCtrl и CTreeCtrl для просмотра всего дерева, а не только одного узла за раз

Рассмотрим проводник Windows (или regedit или аналогичный). Слева находится древовидное представление, а справа — список. Во всех известных мне случаях содержимое правого представления отражает атрибуты выбранного узла на левой панели. Это все хорошо и хорошо... но просто не то, что я хочу.

Узлы дерева, которые я хочу отобразить, имеют очень мало атрибутов (2-3), связанных с каждым узлом - разумное количество для отображения по горизонтали в виде строки в таблице. Вместо того, чтобы тратить все это пространство просмотра списка на один узел с очень небольшим количеством свойств, я хотел бы, чтобы мое представление списка отображало таблицу свойств всего дерева (как часть дерева, которая в настоящее время расширяется). Таким образом, n-я строка в левом представлении (дерево) будет напрямую соответствовать n-й строке в правом представлении (список/таблица), и я получу приличный обзор свойств моего дерева.

Кто-нибудь знает код, который это делает? Я предполагаю, что подчинить CListCtrl CTreeCtrl было бы подходящим способом и каким-то образом переопределить функции вертикальной прокрутки, чтобы они были заблокированы вместе. Я просто не уверен, что свитки можно соединить вот так... между прочим! Все советы с благодарностью приветствуются :-)


person omatai    schedule 25.05.2010    source источник
comment
Пока кто-нибудь не даст убедительный ответ... Думаю, я мог бы просто использовать CListCtrl и смоделировать аспект дерева, используя отступы и - и | символов в первом столбце таблицы. Это будет выглядеть не так красиво, но будет проще в реализации.   -  person omatai    schedule 26.05.2010


Ответы (2)


Вероятно, вы ищете управление деревом столбцов

person Jujjuru    schedule 25.05.2010

Если вы сделаете элемент управления списком отрисовываемым владельцем, было бы тривиально выровнять его с элементом управления деревом. Однако у вас все еще есть проблема с двумя полосами прокрутки, которые необходимо синхронизировать. Возможно, вы могли бы захватить события прокрутки в одном и скопировать их в другой.

Другой вариант - пропустить элемент управления списком и использовать элемент управления заголовком для определения столбцов и просто рисовать текст по мере необходимости.

person Mark Ransom    schedule 25.05.2010
comment
Возможно, вы могли бы уточнить или указать пример кода. Почему-то я не думаю, что владелец draw и trival принадлежат к одному и тому же предложению... В любом случае, нет необходимости в рисовании владельца - каждое расширение или сжатие дерева однозначно определяет, что должно войти в представление списка. Пока размеры шрифта выбираются таким образом, чтобы интервалы были равномерными, MFC будет рисовать все это за меня. На самом деле проблема заключается только в синхронизации прокрутки, не так ли? - person omatai; 26.05.2010