用vc给MFC绘图程序添加橡皮擦功能

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

第1个回答  2006-05-19
其实每次擦除,就是画一个小的背景色的正方形或者小圆!
以 MouseDown 为开始(设置Flag为TRUE)
MouseMove 时触发擦除方法(Flag为TRUE时)
以 MouseUp 为结束(设置Flag为FALSE)
第2个回答  2006-05-19
楼主做的是矢量图还是位图,如果是位图,就用leewycyp的方法。
如果是矢量图,把要擦除的图形数据删掉,再重绘其它图形就行了。
第3个回答  2006-05-31
不知道搂主对 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);
}

在同一地方画两次,就能将前面一次察除了。
要实现橡皮查可以使用这个原理本回答被提问者采纳
第4个回答  2006-05-19
你应该还没做可以选中某个图形吧,只要你做了事情不就解决了.不仅可以删除还可以移动呢!

用vc给MFC绘图程序添加橡皮擦功能
以 MouseDown 为开始(设置Flag为TRUE)MouseMove 时触发擦除方法(Flag为TRUE时)以 MouseUp 为结束(设置Flag为FALSE)

如何通过vc编程实现对mbp图像的各种效果
当然,这些功能在面向对象的方法中都是可以很方便扩展的(如画椭圆,选取对象,对象的位移和旋转操作,根据填充算法实现同色选取,即Photoshop等软件的魔棒功能等),对于橡皮擦功能可以很简单的实现特定工具或告诉用户如何实现此功能(即用背景色利用已有功能绘图)。 内部实现上,要求单独记录各图形的关键属性(如位置、色彩等,这...

用VC++的MFC实现图像的打开,显示,保存,擦除功能的代码
用opencv库,里面所有符合你要的功能函数都有,而且网上很多opencv的例子,随便就能搜索到,给你推荐这个网站http:\/\/blog.csdn.net\/abcjennifer\/article\/details\/7313711;opencv 配置网址在这里:http:\/\/www.cnblogs.com\/freedomshe\/archive\/2012\/04\/25\/2470540.html 希望能帮到你。^_^ ...

用VC的MFC做界面,给“项目”菜单添加控件是显示这个,为什么不能添加控件...
可以在所用到的对话框里,用右键“Insert ActiveX Control” 添加如图所示

VC程序怎么擦去窗口上的东西?或者直接重绘窗口也行?(不是MFC)
确定窗口长方形范围 或 要檫的 长方形范围,用 "背景色刷子" 画这个涂色的长方形 就是擦去。要檫的 长方形范围 可以 按 MoveToEx()LineTo() 里的 坐标x 最大最小,坐标y 最大最小 算出 。用 背景色笔 重画线条 也是 抹去。

VC\/MFC 请问如何把窗体刷回原来的颜色?
你用的是对话框应用程序吧,按你上面的方法会把对话框上的控件也用填充色覆盖掉。用下面的方法就不会了:1、定义一个成员变量 m_clrBK,用来保存当前对话框的背景颜色;2、在OnInitDialog函数中添加如下的代码,初始化对话框的颜色为系统默认的颜色:m_clrBK = GetSysColor(COLOR_3DFACE);3、在On...

1.若用用VC(MFC应用)实现在客户区显示Hello,world
很简单呀 建一个多文档 在initinstance 的时候弹一个模式对话框,里面输入 名字 保存输入 的值 取到每个窗口指针 ,取它的窗口dc 在ondraw里面 画文字 用 getclientrect 可取得窗口大小,居中显示 就行了

VC6.0MFC中怎样给对话框添加背景图片?
你添加的这个不是bmp位图文件 附加位图的时候,不能单单是把文件后缀改成.bmp 你可以用画图,或者其他看图工具,打开图片后另存为bmp格式 再插入的时候,就会变成位图附加到项目中了 附加了以后,图片的id会变成IDB_BITMAP1,你可以改成自己想要的名字 ...

VC\/MFC怎样给菜单项添加勾啊
GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_MENUITEM32771,MF_BYCOMMAND|MF_CHECKED);或者:GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);MF_BYCOMMAND是确定第一个参数是天ID号,MF_BYPOSITION是确定第一个参数填ID值 而MF_CHECKED是按下的意思 MF_UNCHECKED...

VC++6.0工程中,使用MFC应用程序。关于C+工程名+Dlg.cpp文件。
你创建工程的时候,选择对话框模式,它默认的是多重文档模式,再新建一工程,然后在向导里 第一个步骤里面 将多重文档 改为第三个 对话框 模式,就好了。

相似回答