繁体   English   中英

OnLButtonUp在鼠标单击以进行CStatic控制后不会触发

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM