VC 画板 画圆

来源:百度知道 编辑:UC知道 时间:2024/05/03 19:37:32
拖动画圆,为什么颜色很乱啊,但是画完以后 拉动一下对话框 颜色就正常了

if(!Flag)
{

newpen->CreatePen(PS_SOLID,0,CurColor);
oldpen=pDC->SelectObject(newpen);

pDC->SetROP2(R2_NOTXORPEN);
m_Rad = sqrt((double)(lastpoint.x-temppt.x)*(lastpoint.x-temppt.x)+(lastpoint.y-temppt.y)*(lastpoint.y-temppt.y));
pDC->Arc((int)(temppt.x-m_Rad),(int)(temppt.y-m_Rad),(int)(temppt.x+m_Rad),(int)(temppt.y+m_Rad),0,0,0,0);
pDC->SelectObject(oldpen);

lastpoint = point;
m_Rad = sqrt((double)(point.x-temppt.x)*(point.x-temppt.x)+(point.y-temppt.y)*(point.y-temppt.y));
pDC->Arc((int)(temppt.x-m_Rad),(int)(temppt.y-m_Rad),(int)(temppt.x+m_Rad),(int)(temppt.y+m_Rad),0,0,0,0);
pDC->SelectObject(oldpen);

}

这段代码应该是在WM_MOUSEMOVE处理消息中吧,你想用两次异或绘图,恢复原图。

所以应该将pDC->SetROP2(R2_NOTXORPEN);
改为pDC->SetROP2(R2_XORPEN);

另外,你在WM_PAINT中也绘制了图形,所以当你拉动窗口时,触发了窗口重绘,颜色就正常了。
因此,你可以在WM_LBUTTONUP事件的代码中,调用Invalidate(),这样释放鼠标时,自动的进行窗口重绘。