首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

MFC中怎么取消画过的图形

2012-01-19 
MFC中如何取消画过的图形模访Windows自带的画图功能,比如画一条直线,难点是在鼠标点下左键后然后移动鼠标

MFC中如何取消画过的图形
模访Windows自带的画图功能,比如画一条直线,难点是在鼠标点下左键后然后移动鼠标的过程中,如何动态产生到当前点的直线和消失前画出的前一条直线,我想到了两个办法,一个是鼠标移动到一个新点时就用一个白色画笔去覆盖上一条直线,但这造成了图像中间有断点(因为你可能覆盖点别的图形的点),还有一个办法是使上一条直线所在的矩形无效还后重绘图形,但这会造成画面有闪烁。可Windows自带的画图都没有这两个问题。不知道大家有什么好的办法来让一条直线无效,还不影响到别的图形还能保证图像质量(无闪烁)。谢谢

[解决办法]
去看CRectTracker怎么画的
[解决办法]
阅读源码是最好的学习方法.多阅读MFC源代码.
http://msdn2.microsoft.com/en-us/library/ms177537(VS.80).aspx
[解决办法]
设置绘制模式,利用函数SetROP2

CPoint m_ptBegin; //起始点
CPoint m_ptOrigon;//前一个点

OnLButtonDown中
m_ptBegin = m_ptOrigon = point;

OnMouseMove中
CClientDC dc(this);
CPen pen;
pen.CreatePen(PS_SOLID,1,RGB(255,0,0));
CPen * pOldPen = dc.SelectObject(&pen);
if(point != m_ptOrigon)
{
dc.SetROP2(R2_NOTXORPEN);
dc.MoveTo(m_ptBegin);
dc.LineTo(m_ptOrigon);

dc.MoveTo(m_ptBegin);
dc.LineTo(point);

m_ptOrigon = point;
}
就可以实现你说的功能了。

热点排行