MFC用户在图片控件中绘制可调整大小和可移动的矩形

时间:2013-07-03 15:10:18

标签: visual-c++ mfc

我正在使用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);访问我绘制的矩形对象?

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

1 个答案:

答案 0 :(得分:1)

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

要删除旧矩形,请调用Invalidate()以完全重新绘制控件。