我有一个 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 正在吃掉所有的电话吗?
另外,谁能给我一个关于如何修改我的代码的建议,以便如果已经绘制了一个矩形,如果用户绘制了一个新的矩形,那么旧的矩形将被删除?