簡體   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