1

我正在 wxWidgets 中制作一个程序,它具有与 MS Paint 类似的功能,但用于更具体的目的。

我了解创建笔/铅笔对象的各种方法,该对象在您拖动鼠标时提交单个像素。我无法想象的一件事是其他一些常用工具:矩形、椭圆形、直线等。对于这些,您按下鼠标左键设置一个原点,当您在它周围拖动鼠标时会暂时呈现一个从原点到当前鼠标位置在画布上覆盖形状,最终在释放鼠标按钮时将形状提交给图像。

创建此过程的最佳方法是什么?我能想到的唯一解决方案是将原点存储在鼠标按下时,并在拖动鼠标时将临时变量设置为当前鼠标位置。每次鼠标位置发生变化时,都会使从原点到存储的鼠标位置的矩形无效。释放鼠标按钮后,形状将提交给图像模型。

我还没有实现这个,因为我想先得到反馈。这是最佳解决方案,还是容易导致可见闪烁,但有更可取的解决方案?

4

2 回答 2

2

视频显示硬件现在如此之快,您可能不需要为任何这样的聪明才智而烦恼。

这是一个更简单的方法

- *鼠标移动时按下按钮并选择工具 X*
- IF flagToolInUse THEN 从图像模型中删除以前的
- flagToolInUse = TRUE
- 使用工具 X 更新图像模型
- 将图像绘制到不可见的缓冲区
- 复制缓冲区以显示
- 完毕

- *按钮释放*
- flagToolInUse = FALSE
- 完毕

这样做的真正优势是您可以编写一次代码,并用于对图像的每次更改,无论使用什么工具。

如果您需要更多关于使用 wxWidgets 实现无闪烁双缓冲显示的详细信息,这里有一个介绍(主要是 windows)

于 2011-05-07T15:38:32.817 回答
1

我建议在FloatCanvas中查看他们是如何做到的。它适用于 wxPython,但即使您使用“普通”wxWidgets,它也应该给您一些想法。

于 2011-05-07T15:25:58.153 回答