gpt4 book ai didi

c++ - 鼠标单击 CStatic 控件后 OnLButtonUp 未触发

转载 作者:行者123 更新时间:2023-11-28 03:14:55 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com