【发布时间】:2019-04-11 04:21:41
【问题描述】:
背景
我正在处理 wxWidgets 中的几个自定义控件,发现我不确定实现复杂嵌套控件的“干净”或“预期”方式,即原则上可以由几个子控件组成的控件控制。
以图表视图为例(例如对于 UML 图)。该图由节点和边组成。每个节点可能包含一个用于删除节点的按钮。我可能还想要整个图表的缩小概览图。
基线
我当前的实现是(基于我找到的示例和手册)处理所有绘图的单个图表控件 - 边缘、节点、按钮、概览图像,这不是那么不方便,因为我不想要本机控件无论如何,并且还根据在屏幕上找到它们的坐标来处理按钮上的所有点击事件。
另类
但我一直想知道这是否真的是正确的方法,最近我想到可能会有更好的方法:说(例如)class Node : public wxPanel,在Node 里面是一个按钮,Node 的其余部分(节点颜色等)由我在Node 背景上绘制。然后我将许多Nodes 放在class DiagramView : public wxPanel 中,在每个图表节点的位置。我还在DiagramView 中放置了一个class Overview : public wxControl。
这意味着我只将那些Nodes 添加到目前可见的DiagramView。
我在下面添加了当前实现(上)和替代方案(下)的草图。类边界用粗虚线标记。完全自定义绘制的控件是红色的,面板是蓝色的。
我也意识到有用于绘制图形的库,这只是一个直观的示例,但我的问题更笼统:什么是正确或预期的方式,或者构建嵌套/复杂自定义控件的最佳实践?自定义绘制所有内容是否更好,例如通用树视图?或者更好地继承例如从面板中嵌套这些,并且只在它们的背景和原子自定义控件(如按钮)上绘制?还是出于某种原因所有这些问题?任何提示将不胜感激。
【问题讨论】:
-
你可能会在 wxWidgets 论坛上得到更多的回复。
标签: c++ user-interface wxwidgets