2011-05-07 35 views
0

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

我了解各种创建笔/铅笔对象的方法,您可以在拖动鼠标时提交单个像素。有一件事我很难看见是其他一些常用工具:矩形,椭圆形,线条等。对于这些,您按下鼠标左键设置一个原点,并且当您拖动鼠标时,它会临时呈现一个将画布上的形状从原点叠加到当前的鼠标位置,最后在释放鼠标按钮时将形状赋予图像。

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

我还没有实现这一点,因为我想先反馈。这是最佳解决方案,还是容易引起可见闪烁,还有更可取的解决方案?

回答

1

视频显示硬件现在非常快,你可能不需要打扰任何这样的聪明。

这里有一个简单的方法

 
- *Mouse moves with button down and tool X selected* 
- IF flagToolInUse THEN remove previous from image model 
- flagToolInUse = TRUE 
- Update image model with tool X 
- Draw image to invisible buffer 
- Copy buffer to display 
- Done 

- *Button released* 
- flagToolInUse = FALSE 
- Done 

这样做的真正的好处是,你可以编写一次代码,并使用每一个变化的图像,无论使用什么样的工具。

如果您需要实现无闪烁wxWidgets的双缓冲显示,这里更多的细节是introduction(窗口居多)

0

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