for(int i=0;i<m_startX.GetSize();i++)
{
int x1=m_startX.GetAt(i);
int y1=m_startY.GetAt(i);
int x2=m_endX.GetAt(i);
int y2=m_endY.GetAt(i);
pDC->MoveTo(x1,y1);
pDC->LineTo(x2,y2);
}
这里你有没有想过m_startX的size可能会大于m_endX的size,原因是,如果按下后,在松开的那个事件时,鼠标移出了窗口,窗口捕捉不到松开事件,导致m_endX的size和m_startX的size不匹配.
建议用二套点记录方案,一套用于OnMouseMove里,只记录当前活动情况,只有在松开的时候,才将该直线数据记录到另一套正式数据记录中,这个正式的数据只在OnDraw中使用.
以上只是个人想法,不过在观察了微软的画图工具后,发现,即使鼠标离开窗口,它也能画图,因此我认为,它除了使用了上面说的方法,鼠标的捕捉事件是被放到了更深一层的地方,这样不关鼠标在什么地方,事件都被处理,也就不至于起点和终点的size不匹配而造成GetAt的崩溃了.
安全起见,在使用点记录容器前,检查一下它们的匹配性还是有必要的.