楚辞译注哪个版本最好:关于橡皮筋绘图?

来源:百度文库 编辑:高校问答 时间:2024/05/05 22:49:46
MOUSEMOVE里有这样一段代码,我不太理解

CDC* pDC = GetDC();

pDC->SetROP2(R2_NOTXOPEN);

pDC->SelectObject(&m_oMyPen);

pDC->MoveTo(m_pStartPoint);

pDC->LineTo(m_pEndPoint);

m_pEndPoint = point;

pDC->MoveTo(m_pStartPoint); //MOUSEMOVE的时候就相当于一个循环,这两句代码是不是有点多余

pDC->LineTo(m_pEndPoint); //但删掉之后就会出现N多条线

这个橡皮筋效果实现的原理是什么

橡皮筋效果实现的原理有好多种,在这里用的是反色重画的方法,即当鼠标移动的时候,先把原来的线用反色线覆盖,然后画新的线。
CDC* pDC = GetDC(); //取得设备

pDC->SetROP2(R2_NOTXOPEN); //设定画笔,为NOTXOPEN即所画颜色与背景相反

pDC->SelectObject(&m_oMyPen);

pDC->MoveTo(m_pStartPoint);

pDC->LineTo(m_pEndPoint); //这是重画原先的点,由于采用的是NOTXOPEN,所以如果原来的线是黑的(别的颜色也一样),现在就变成白的,自然看不到了。

m_pEndPoint = point; //重新取得新点

pDC->MoveTo(m_pStartPoint); //重新回到起点

pDC->LineTo(m_pEndPoint); //画新线,此时背景如是白的,自然得到的颜色是黑的。(因为反色)

除了这种方法以外,实现橡皮筋效果还可以采用区域重画,双缓存区域重画等方法。相对而言,这种方法效率最高,但是颜色比较固定,就是说如果你的背景是白的,那么你线的颜色只能是黑的。