【问题标题】:Dot Net Vc++ undo drawlineDot Net Vc++ 撤消画线
【发布时间】:2011-03-24 07:36:38
【问题描述】:

在我的应用程序中,我在图片框图像上画了一条线。 我希望撤消或删除最后绘制的线。 我们该怎么做?

我能够使用字典集合撤消最后绘制的线,然后绘制我需要的线。

我现在的问题是当我第一次加载应用程序时,我想要绘制线条。我可以使用 PictureBox_Paint 事件来做到这一点,但是在这种情况下,只有在 e->Graphics 创建 Graphics 时才会绘制线条,如果我使用 pictureBox->CreateGraphcics() 来绘制线条,则不会绘制线条。 为什么 e->graphics 和 picturebOx->CraeteGraphics() 不同? 我还可以捕获哪些其他函数来在表单加载时画线?

【问题讨论】:

    标签: winforms visual-c++ graphics


    【解决方案1】:

    你是怎么画线的? GDI 是即时模式 API,没有撤消功能。您要么需要将位图存储在内存中或磁盘上,以便重新恢复它,要么需要编写自己的绘图 API(如果愿意,可以基于 GDI),以便重做所有绘制步骤直到线条,或者您可以使用反转像素颜色的 GDI 笔模式。然后,如果您再次绘制同一条线,它将有效地撤消更改。然而,这在 GDI+ 中是不可能的(就像在 winforms 中使用的那样),它也不允许抗锯齿。

    【讨论】:

    • 我正在使用 CLI/CLR winforms。使用 as _graphics = pictureBox->CreateGraphics();_graphics->DrawLine(myPen,xstart,xend); 绘制线条
    • Xaria,那么我建议您将预先绘制的图像存储在位图数组中,以便您可以恢复到上一个​​阶段。如果您期望有很多这样的操作,您应该考虑将撤消位图数据存储在磁盘上。
    • 我正在考虑将命令存储在堆栈中并刷新图片框并弹出所有先前的操作。
    • Xaria,如果你只用单色画线,那是个好方法。但是 GDI 支持大量绘图操作,您必须找到一种方法来用您的自定义撤消数据来表示它们。这是/很多/的工作。
    猜你喜欢
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 2011-04-26
    • 2017-05-24
    • 1970-01-01
    • 1970-01-01
    • 2011-12-29
    • 2023-03-19
    相关资源
    最近更新 更多