鼠标左击确触发了OnMouseMove事件,想知道可能的原因

2025-04-07 13:45:58
推荐回答(3个)
回答1:

这个肯定是程序的问题。

你不是说了吗,当这个范围小于100*100像素的时候就默认画出个100*100的虚线框. 我估计就是基于这个条件,当判断鼠标位置时,发现这个范围小于100*100,就用了SetCursorPos等函数调整鼠标位置,结果就产生了mouse move消息。

修正的办法是在释放鼠标时才判断这个范围的大小。

回答2:

不是
鼠标动了就会激发OnMouseMove这个函数,而不存在OnLButtonDown函数走完了以后进入,你不能保证从你按了开始后面鼠标一点点动都没有(关于鼠标移动消息这个事件,我以前遇到过程序还没出来,我动了鼠标,然后程序出来后我不动鼠标,但是移动消息还是发送了,估计鼠标移动的消息被打入了栈,前面移动的后面会执行,所以会有这种情况),所以OnMouseMove里面应该有一个对大小进行判断的函数,而不能仅仅是个OnLButtonDown的响应标志
建议可以这样考虑
OnLButtonDown里面设置一个标记,
OnMouseMove获取OnLButtonDown的标记,为真则进行坐标计算,为长宽是否满足100*100设置标记
OnLButtonUp获取OnMouseMove里面的标记,如果为真,就把OnMouseMove里面的矩形画出来

回答3:

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 完成 你最后想画的。。。