[英]OnLButtonUp not firing after mouse click for CStatic control
我有一个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
。 关于矩形,使用常规绘图基元,而不是在矩形完成后拖动它们。
要删除旧矩形然后绘制一个新矩形,请使用不具有自己颜色但反转现有图像像素的特殊笔。 然后绘制旧矩形将擦除它。 请参阅WM_MOUSEMOVE中的示例:
http://msdn.microsoft.com/en-us/library/windows/desktop/dd145184(v=vs.85).aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.