我有一个 MFC 应用程序,我试图让用户通过在图片控件上拖动鼠标来绘制一个矩形。我创建了自己的由 CStatic 子类化的 PictureCtrl 类。但是,当我单击任何鼠标时,OnLButtonUp() 不会触发。
void PictureCtrl::OnLButtonDown(UINT nFlags, CPoint point)
{
SetCapture();
anchor = point;
CRect rect(point,point);
CDC* pDC = GetDC();
pDC->DrawDragRect(&rect, CSize(1,1), NULL, CSize(1,1), NULL, NULL);
m_lastRect = rect;
ReleaseDC(pDC);
CStatic::OnLButtonDown(nFlags, point);
}
void PictureCtrl::OnMouseMove(UINT nFlags, CPoint point)
{
if(GetCapture() == this)
{
CRect rect(anchor, point);
rect.NormalizeRect();
CDC *pDC = GetDC();
pDC->DrawDragRect(&rect, CSize(1,1), &m_lastRect, CSize(1,1), NULL, NULL);
m_lastRect = rect;
ReleaseDC(pDC);
ReleaseCapture();
}
CStatic::OnMouseMove(nFlags, point);
}
void PictureCtrl::OnLButtonUp(UINT nFlags, CPoint point)
{
if(GetCapture() == this)
{
CDC *pDC = GetDC();
CRect rect(0,0,0,0);
pDC->DrawDragRect(rect, CSize(1,1), &m_lastRect, CSize(1,1), NULL, NULL);
ReleaseDC(pDC);
ReleaseCapture();
}
CStatic::OnLButtonUp(nFlags, point);
}
如果有人能告诉我为什么 OnLButtonUp 没有触发,我将不胜感激。是因为当我拖动鼠标时 OnMouseMove 占用了所有调用吗?
此外,任何人都可以就如何修改我的代码提出建议,以便在已经绘制矩形的情况下,如果用户绘制新矩形,旧矩形将被删除吗?
最佳答案
您不应该在 OnMouseMove
中使用 ReleaseCapture()
,否则如果鼠标在窗口外,您将错过 OnLButtonUp
。关于您的矩形,使用常规绘图图元,不要在矩形完成后拖动图元。
关于c++ - 鼠标单击 CStatic 控件后 OnLButtonUp 未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17215295/