这个肯定是程序的问题。
你不是说了吗,当这个范围小于100*100像素的时候就默认画出个100*100的虚线框. 我估计就是基于这个条件,当判断鼠标位置时,发现这个范围小于100*100,就用了SetCursorPos等函数调整鼠标位置,结果就产生了mouse move消息。
修正的办法是在释放鼠标时才判断这个范围的大小。
不是
鼠标动了就会激发OnMouseMove这个函数,而不存在OnLButtonDown函数走完了以后进入,你不能保证从你按了开始后面鼠标一点点动都没有(关于鼠标移动消息这个事件,我以前遇到过程序还没出来,我动了鼠标,然后程序出来后我不动鼠标,但是移动消息还是发送了,估计鼠标移动的消息被打入了栈,前面移动的后面会执行,所以会有这种情况),所以OnMouseMove里面应该有一个对大小进行判断的函数,而不能仅仅是个OnLButtonDown的响应标志
建议可以这样考虑
OnLButtonDown里面设置一个标记,
OnMouseMove获取OnLButtonDown的标记,为真则进行坐标计算,为长宽是否满足100*100设置标记
OnLButtonUp获取OnMouseMove里面的标记,如果为真,就把OnMouseMove里面的矩形画出来
OnLButtonDown 只记录 起点。
OnMouseMove 给个参考的给你
m_point = point;
CDC *pDC = GetDC();
int mode = pDC->SetROP2(R2_NOT); //覆盖模式
if((m_oldpoint.x!=-100)&&(m_oldpoint.y!=-100))//覆盖上次操作
{
pDC->MoveTo(m_bpoint);
pDC->LineTo(m_oldpoint.x,m_bpoint.y);
pDC->LineTo(m_oldpoint);
pDC->LineTo(m_bpoint.x,m_oldpoint.y);
pDC->LineTo(m_bpoint);
}
m_oldpoint = m_point;
pDC->MoveTo(m_bpoint);
pDC->LineTo(m_point.x,m_bpoint.y);
pDC->LineTo(m_point);
pDC->LineTo(m_bpoint.x,m_point.y);
pDC->LineTo(m_bpoint);
pDC->SetROP2(mode);
ReleaseDC(pDC);
点有点复杂,自己研究下。。
OnLButtonUp 完成 你最后想画的。。。