我正在wxWidgets中创建一个程序,它具有与MS Paint类似的功能,但是出于更具体的目的。
我了解创建笔/铅笔对象的各种方法,当您拖动鼠标时,该对象会提交单个像素。我可视化的一件事是其他一些常见的工具:矩形,椭圆形,直线等。对于这些,你按下鼠标左键来设置原点,当你将鼠标拖动它时,暂时渲染一个画布上的形状从原点到当前鼠标位置的叠加,最后在释放鼠标按钮时将形状提交给图像。
创建此流程的最佳方法是什么?我能想到的唯一解决方案是将原点存储在鼠标按下,并且拖动鼠标以将临时变量设置为当前鼠标位置。每次鼠标位置发生变化时,您都会使矩形从原点无效到存储的鼠标位置。释放鼠标按钮后,形状将提交给图像模型。
我还没有实现这个,因为我想首先反馈。这是最佳解决方案,还是容易引起可见的闪烁,提供更优选的解决方案?
答案 0 :(得分:2)
视频显示硬件现在非常快,您可能不需要为这些聪明而烦恼。
这是一种更简单的方法
- *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(主要是Windows)
答案 1 :(得分:1)
我建议在FloatCanvas中查看他们是如何做到这一点的。它适用于wxPython,但即使你使用的是“普通”的wxWidgets,也应该给你一些想法。