Фон
Я работаю над несколькими пользовательскими элементами управления в wxWidgets и обнаружил, что не уверен насчет «чистого» или «намеченного» способа реализации сложных вложенных элементов управления, то есть элементов управления, которые в принципе могут, состоит из нескольких подэлементов управления.
Рассмотрим в качестве примера представление схемы (например, для диаграммы UML).Эта диаграмма состоит из узлов и ребер.Каждый узел может содержать кнопку для удаления узла.Возможно, мне также понадобится небольшое увеличенное обзорное изображение всей диаграммы.
Базовая линия
Моя текущая реализация (на основе найденных мной примеров и руководства) представляет собой единый элемент управления диаграммой, который обрабатываетвсе рисунки - края, узлы, кнопки, обзорное изображение, что не так уж и неудобно, потому что я все равно не хочу нативных элементов управления, а также обработку всех событий нажатия на кнопках на основе поиска их координат на экране.
Альтернатива
Но я некоторое время задавался вопросом, действительно ли это правильный путь, и недавно мне пришло в голову, что может быть лучший вариант: сказать (например), что class Node : public wxPanel
,внутри этого Node
находится кнопка, а остальная часть Node
(цвет узла и т. д.) нарисована мной на фоне Node
.Затем я помещаю множество Node
в class DiagramView : public wxPanel
в местах каждого узла диаграммы.Я также помещаю class Overview : public wxControl
внутри DiagramView
.
Это будет означать, что я добавляю только те Node
s к DiagramView
, которые видны в данный момент.
У меня естьдобавил набросок моей текущей реализации (вверху) и альтернативы (внизу) ниже.Границы класса отмечены жирными пунктирными линиями.Элементы управления, полностью нарисованные на заказ, - красные, панели - синие.
Также я понимаю, что есть библиотеки для рисования графиков, это просто интуитивно понятный пример, но мой вопрос более общий: что является правильным или намеченнымспособ или лучшая практика для создания вложенных / сложных пользовательских элементов управления?Лучше ли рисовать все, как, например, в виде дерева?Или лучше наследовать, например, от панелей, вкладывать их и рисовать только на их фонах и элементарных элементах управления, таких как кнопки?Или все это по какой-то причине проблематично?Любая подсказка будет оценена.