MFC基于对话框图片控件绘图删除问题
绘图框架:我用的是对话框模式,在对话框中添加picture控件,把其设置成矩形、白底,这控件就是我用来鼠标写字的区域了实现原理:在类视图中,我添加了一个新类A,整个鼠标响...
绘图框架:我用的是对话框模式,在对话框中添加picture控件,把其设置成矩形、白底,这控件就是我用来鼠标写字的区域了
实现原理:在类视图中,我添加了一个新类A,整个鼠标响应、运动、写字程序都放在类A中,A.h中定义的一些成员:
void Init();
CRect m_rectClient; //构造一对象
CDC m_dcPlot;//--------定义的是设备上下文对象的类----------
CBitmap *m_pbitmapOldPlot;
CBitmap m_bitmapPlot;
CPen m_penPlot;
CPoint m_ptPrevious;
CBrush m_brushBack;
==========A.cpp中代码如下:==================
CWordWrite::CWordWrite()
{
//创建画笔,使用黑色轨迹,线宽3
m_penPlot.CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
//创建背景画刷,白色背景
m_brushBack.CreateSolidBrush(RGB(255, 255, 255));
//-----本函数用指定的颜色初始化画刷。随后该画刷就可用于任何设备上下文的当前画刷。
//-----当应用使用完CreateSolidBrush创建的画刷之后,应该从设备上下文中移出该画刷。
//初始值上一个点置为无效
m_ptPrevious.x = -1;
m_ptPrevious.y = -1;
}
CWordWrite::~CWordWrite()
{
if (m_pbitmapOldPlot != NULL)
m_dcPlot.SelectObject(m_pbitmapOldPlot); //返回被替代的对象的指针,将对象选入设备上下文中。
}
void CWordWrite::Init()
{
CClientDC dc(this);
}
//----------------------------------------------------------------------------
//----------------------------鼠标左键起来响应函数----------------------------
//----------------------------------------------------------------------------
void CWordWrite::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//鼠标左键抬起时,上一个点置为无效
m_ptPrevious.x = -1;
m_ptPrevious.y = -1;
CStatic::OnLButtonUp(nFlags, point);
}
//----------------------------------------------------------------------------
//----------------------------鼠标移动响应函数--------------------------------
//----------------------------------------------------------------------------
void CWordWrite::OnMouseMove(UINT nFlags, CPoint point)
{
CStatic::OnMouseMove(nFlags, point);
}
//----------------------------------------------------------------------------
//----------------------------绘图函数----------------------------------------
void CWordWrite::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
//将内存DC显示到控件中
dc.BitBlt(0,0,m_rectClient.Width(),m_rectClient.Height(),
&m_dcPlot,0,0,SRCCOPY);
//SRCCOPY:直接复制源设备区域到目标设备中
// Do not call CStatic::OnPaint() for painting messages
}
(代码部分没写全,字数不够)
现在问题是:我在控件区域用鼠标写了一些笔划后,我想将其中某段给删除掉,不是全部清除,而是清除指定某点或某一段!!
该如何操作??要用什么函数操作??等大神求解。
(分就20了。唉) 展开
实现原理:在类视图中,我添加了一个新类A,整个鼠标响应、运动、写字程序都放在类A中,A.h中定义的一些成员:
void Init();
CRect m_rectClient; //构造一对象
CDC m_dcPlot;//--------定义的是设备上下文对象的类----------
CBitmap *m_pbitmapOldPlot;
CBitmap m_bitmapPlot;
CPen m_penPlot;
CPoint m_ptPrevious;
CBrush m_brushBack;
==========A.cpp中代码如下:==================
CWordWrite::CWordWrite()
{
//创建画笔,使用黑色轨迹,线宽3
m_penPlot.CreatePen(PS_SOLID, 3, RGB(0, 0, 0));
//创建背景画刷,白色背景
m_brushBack.CreateSolidBrush(RGB(255, 255, 255));
//-----本函数用指定的颜色初始化画刷。随后该画刷就可用于任何设备上下文的当前画刷。
//-----当应用使用完CreateSolidBrush创建的画刷之后,应该从设备上下文中移出该画刷。
//初始值上一个点置为无效
m_ptPrevious.x = -1;
m_ptPrevious.y = -1;
}
CWordWrite::~CWordWrite()
{
if (m_pbitmapOldPlot != NULL)
m_dcPlot.SelectObject(m_pbitmapOldPlot); //返回被替代的对象的指针,将对象选入设备上下文中。
}
void CWordWrite::Init()
{
CClientDC dc(this);
}
//----------------------------------------------------------------------------
//----------------------------鼠标左键起来响应函数----------------------------
//----------------------------------------------------------------------------
void CWordWrite::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
//鼠标左键抬起时,上一个点置为无效
m_ptPrevious.x = -1;
m_ptPrevious.y = -1;
CStatic::OnLButtonUp(nFlags, point);
}
//----------------------------------------------------------------------------
//----------------------------鼠标移动响应函数--------------------------------
//----------------------------------------------------------------------------
void CWordWrite::OnMouseMove(UINT nFlags, CPoint point)
{
CStatic::OnMouseMove(nFlags, point);
}
//----------------------------------------------------------------------------
//----------------------------绘图函数----------------------------------------
void CWordWrite::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: Add your message handler code here
//将内存DC显示到控件中
dc.BitBlt(0,0,m_rectClient.Width(),m_rectClient.Height(),
&m_dcPlot,0,0,SRCCOPY);
//SRCCOPY:直接复制源设备区域到目标设备中
// Do not call CStatic::OnPaint() for painting messages
}
(代码部分没写全,字数不够)
现在问题是:我在控件区域用鼠标写了一些笔划后,我想将其中某段给删除掉,不是全部清除,而是清除指定某点或某一段!!
该如何操作??要用什么函数操作??等大神求解。
(分就20了。唉) 展开
3个回答
展开全部
搞个上下文菜单或者菜单项,在选中一个连续线段后执行操作,如果要简单点就直接在鼠标点击的时候判断下面是否有连续线段,有的话就选定这个线段执行操作,复杂点就按下的时候确定这个点,然后判断前一次是否有这样的点,如果这两个点在一个连续的线段上,选中这两点间的线段再执行操作,具体实现可以在书上找找,或者网上搜索下!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
如果撤销步骤不多的话,可以定义几个CPoint变量保持前几次鼠标点,撤销时重绘前一次的点即可
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用CBrush创造个画刷 颜色为白色像橡皮擦 擦掉
更多追问追答
追问
但我做的不像是画画那种,我要能对该像素具体操作,通过代码指定删除黑点或段
追答
用GetPiexl获取像素点 改变Apa l 值(及透明度)
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询