马桶解说穿越火线2017:用vc给MFC绘图程序添加橡皮擦功能
来源:百度文库 编辑:神马品牌网 时间:2024/05/13 14:52:04
当然,如果可以实现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)
你应该还没做可以选中某个图形吧,只要你做了事情不就解决了.不仅可以删除还可以移动呢!