Visual C++ MFC 在一个对话框怎么样实现undo功能,例如按下一个Button,即能撤销上次输入的 *** 作

Visual C++ MFC 在一个对话框怎么样实现undo功能,例如按下一个Button,即能撤销上次输入的 *** 作,第1张

听说在设计一个编辑器的时候,撤销 *** 作一直是一个难点。我所能想到的,也只是保存上次 *** 作时,系统发出的消息,捕获它,获取相反的动作。我想您说的这个撤销功能,应该是编辑撤销,而不包括按键响应之类的吧。如果是按键响应这一类动作的撤销,您不妨就设置一个的Vector,在每一个按键响应函数内,将反向动作的函数指针添加到Vector中,当您按下那个Button的时候,调用Vector中的最后一个指针,然后删除它。如果是文本编辑类型,恐怕难度会大一些吧。至于this指针,我想不出怎么利用它。

不清楚你的具体程序,只能模糊建议。

撤销和选取,首先要求你的绘图程序,必须记录完整的绘图数据。

选取,就是在OnLbuttonUp函数中,通过鼠标坐标(转换ScreenToClient)去对比记录的绘图数据,多数是通过PtInRect PtInRgn之类的,也可以使用自定义算法计算。选取之后,可以给你的类增加一个标记,如果有标记,在OnDraw里面绘制的时候就“标红”显示。

撤销,应该是在选取之后的,将有选中标记的类删除或者在OnDraw里面跳过显示绘制就可以了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/7901660.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存