黄茂如与黄世再:用vc给MFC绘图程序添加橡皮擦功能

来源:百度文库 编辑:查人人中国名人网 时间:2024/04/29 02:01:58
我用VC已经做好了一个MFC程序,是一个绘图程序,就是能画直线,长方形,圆形,以缩放效果和重绘效果,还能保存的.现在还想做个橡皮擦,现在思路还不是很清晰,毕竟只学了一个学期,要求是:只要点一下某个图形,该图形就被擦除就行.比如,画了一条直线,只要用橡皮擦点一下该直线就消失.
当然,如果可以实现windows画图程序里的橡皮擦那种部分部分的擦除效果更好.
希望各位大虾最好能提供一下所需的相关类和函数,毕竟我对VC中成千上万的函数及类不清楚.

不知道搂主对 CDC 类清不清楚,该类有一种模式教师 NOR 好像。
当使用该模式画图时,两次一样的操作可以将前面的操作察除。
该模式就是 异或 的意思。
具体的你可以去查找一下,相关图书。
下面代码可以参考下
CClientDC dc(this);

if(point)
{
//dc.TextOut(wParam,lParam,"自定义消息画点!");
CPen newPen(PS_DASH,2,RGB(20,30,40)); //创建新画笔
CPen* oldPen=dc.SelectObject(&newPen); //选入设备环境
dc.MoveTo(wParam,lParam);
dc.LineTo(wParam+200,lParam);
dc.SelectObject(oldPen);
}
else
{
dc.SetROP2(R2_NOTXORPEN);
//dc.TextOut(wParam,lParam-15,"自定义消息画点!");
CPen newPen(PS_DASH,2,RGB(20,30,40)); //创建新画笔
CPen* oldPen=dc.SelectObject(&newPen); //选入设备环境
dc.MoveTo(wParam,lParam-15);
dc.LineTo(wParam+200,lParam-15);
dc.SelectObject(oldPen);
}

在同一地方画两次,就能将前面一次察除了。
要实现橡皮查可以使用这个原理

楼主做的是矢量图还是位图,如果是位图,就用leewycyp的方法。
如果是矢量图,把要擦除的图形数据删掉,再重绘其它图形就行了。

其实每次擦除,就是画一个小的背景色的正方形或者小圆!
以 MouseDown 为开始(设置Flag为TRUE)
MouseMove 时触发擦除方法(Flag为TRUE时)
以 MouseUp 为结束(设置Flag为FALSE)

你应该还没做可以选中某个图形吧,只要你做了事情不就解决了.不仅可以删除还可以移动呢!