绘制在wxPanel或添加许多wxControls
Painting over wxPanel or add many wxControls?
我有形式与空间,必须是六边形地图。首先想到的是-在那里放置wxPanel,并在上面画上我想要的东西。
但实际上所有的六边形都是一样的(它们的类型可能少于10种,颜色可能不同)。我读到有可能创建我自己的wxControls。如果我将创建我需要的wxHexagon控件,并将它们放置在wxPanel或任何其他布局上,该怎么办?
这可能更容易使用:如果用户将点击十六进制,我将不需要计算坐标,并了解他点击选择它的十六进制,我只需要设置事件为每个六边形控制,不是吗?
这是可能的吗(我的主要问题是设置这样的控件大小,因为它必须是六边形,而不是矩形,并将它们放置在一些布局的正确位置。
哪个更好?
无需创建自己的控件。wxButton可以显示位图。你也可以使用wxBitmapButton
to count coordinates and understand to which hex he clicked
实际上,这就是我要做的方式,而不是用许多相同的控制每个十六进制一个。这几乎是微不足道的,如果你所有的六边形都是相同的大小。当用户单击面板时,将点击的x和y协同词除以十六进制大小以找到行和列,将行乘以行计数并添加列,您立即拥有十六进制单击的索引。
在wxWidgets中创建自定义控件非常简单,这不仅仅是为大师保留的东西。基本上,只是派生一个新的c++类(从wxWindow
,你不需要wxPanel
这样的自定义控件,所以为什么从它不必要地派生?),绑定到你感兴趣的事件(至少wxEVT_PAINT
,经常wxEVT_CHAR
和鼠标事件),并实现他们的处理程序,唯一不明显的部分,也许,覆盖DoGetBestClientSize()
基类虚拟,如果你的控件有一个自然的最佳大小。
就是这样。因此,创建自定义控件并不比在现有窗口中实现其功能需要更多的代码。正因为如此,你应该完全从你的代码设计的角度来做出选择,也就是说,有一个这样的控件是否有意义,或者它们是否总是在组中使用?重用它有意义吗?将来是否需要类似的控件(可以作为派生类实现以重用实现)?等等
不是答案,但是太长了。
如果没有明确的目标,哪个最好似乎完全是主观的,是个人偏好的问题。
也就是说,我猜哪种实现最终归结为许多因素。至少:
- 你认为你有可能想要六边形的控件吗未来
-
它们之间的距离有多近
- 实现它们作为一个新的控件肯定会使重用在一个以后的日期非常快速和容易
- 如果他们彼此接触(像蜂巢一样),我可以想象自己更清楚地处理hit-testing,而不是依赖于(矩形?)常规按钮使用的命中测试。
我想要一个LCD控件来模拟1602 LCD(1位ASCII),所以我将其实现为继承自wxWindow的新控件。后来,我简单地继承了我的控件,使其成为一个16位160x128彩色图形lcd。它很快就适应了。因为它是它自己的控件,所以我只是包含了必要的文件并重新实现了所需的成员函数。没有必要从一个旧项目中修改部分内容。
至于碰撞测试-当彼此排列时,使用方形边界框进行碰撞测试将意味着你有重叠的边界框。我认为你必须子类化wxBitmapButton或wxButton才能正确处理这种情况。由于六边形的大小是由图像决定的,而不是由变量决定的,我可以看到这很快就会变得非常混乱。
也许我对使用wxButton或wxBitmapButton的任务感到悲观,同时对实现自定义控件过于乐观。在任何情况下,我仍然倾向于让每个六边形成为某种描述的控件,这样它们就可以分别为你处理命中测试和点击事件生成——把这个和布局逻辑放在主程序中不是我的偏好。
我可能会使用它们适合的圆的直径作为尺寸,而不是边长测量,尽管每个都很容易,并且有更适合的情况。你可以非常快速和容易地计算出两者之间的比例。
作为一个粗略的指导:1个单位圆可以容纳一个六边形,从一个角到另一个角是1个单位,从一个角到另一个角是0.89个单位,每条边是0.48个单位。
总之,最容易使用的是自定义控件。实现wxButton或wxImageButton可能是最简单/最快/最小的代码。最好的功能来自自定义控件。我很有兴趣看看旋转将如何使用一个标准的按钮类处理。- 在混合代码库中将C转换为C++时出现许多包含错误
- 函数在许多数字上转换为基数 1 时减去 2?
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 我想生成许多矩阵并用随机数填充它
- Visual Studio 2017 停止工作,并在打开后显示许多控制台窗口
- C++许多 SFINAE 风格的过载
- 擦除许多矢量元素,同时使用'auto'
- 错误:'int'之前的预期主表达式以及代码中的许多类似错误
- 为什么许多项目不提供预编译的二进制文件?
- 如何组合许多连续的图像来模拟逼真的运动模糊?
- QPixmap在Qt中加载了许多图像
- 正确设计具有许多C++常量的项目
- 许多文件描述符在调用sys_clone时
- 对许多字段的元素进行排序
- C++函数调用与许多点运算符
- 我的代码运行良好,但现在当尝试将其制作成模板时,我遇到了许多看似无关的错误。这是怎么回事?
- 具有许多派生类的可重用类的良好设计
- 在constexpr函数中插入许多模板
- C++ / CMake :为许多'source plugins'制作插件系统
- 绘制在wxPanel或添加许多wxControls