0

我正在使用 MFC 编写一个应用程序,并且我试图让用户能够通过鼠标拖动在图片控件顶部绘制一个矩形。我还希望允许用户通过鼠标单击来调整矩形的大小和移动。

目前,我已经编写了一个自定义图片控件类的一部分来处理图片控件上的绘图。

void PictureCtrl::OnLButtonDown(UINT nFlags, CPoint point) 
{
    SetCapture();
    anchor = point;
    CDC* pDC = GetDC();

    CRect rect(point,point);
    pDC->DrawDragRect(&rect, CSize(1,1), NULL, CSize(1,1), NULL, NULL);

    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), &userRect, CSize(1,1), NULL, NULL);
        ReleaseDC(pDC);

    }

    CStatic::OnMouseMove(nFlags, point);
}
void PictureCtrl::OnLButtonUp(UINT nFlags, CPoint point) 
{
    if(GetCapture() == this) 
    {
        CDC *pDC = GetDC();

        // pDC brush color and fill transparent
        CPen penBlack;
        penBlack.CreatePen(PS_SOLID, 3, RGB(0,0,0));
        pDC->SelectStockObject(NULL_BRUSH);
        pDC->SelectObject(penBlack);
        pDC->Rectangle(userRect);

        ReleaseDC(pDC);
        ReleaseCapture();
    }
    CStatic::OnLButtonUp(nFlags, point);

谁能让我开始了解如何使用鼠标拖动使矩形可调整大小和移动?

如何访问我使用的矩形对象pDC->Rectangle(userRect);

如果用户绘制另一个矩形,我还想删除一个旧矩形,一次只允许一个矩形在图片控件上。谢谢!

4

1 回答 1

1

无法访问您绘制的矩形对象。它不再是一个物体,只是绘画。要在靠近边缘时选择它或更改光标,您必须将 OnMouseMove 中报告的每个位置与矩形的每个线位置进行比较。在名为 DrawCLI 的 MSDN MFC 示例中有执行类似工作的示例。

要删除旧的矩形,您调用 Invalidate() 会导致控件的完全重绘。

于 2013-07-03T15:34:58.610 回答