【问题标题】:MFC User drawn resizeable and moveable rectangle in picture controlMFC用户在图片控件中绘制可调整大小和可移动的矩形
【发布时间】:2013-07-01 08:40:12
【问题描述】:

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

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

【问题讨论】:

    标签: visual-c++ mfc


    【解决方案1】:

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

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

    【讨论】:

    • 感谢您的澄清。但是,我添加了一个双击处理程序来测试 Invalidate(),如下所示: void PictureCtrl::OnLButtonDblClk(UINT nFlags, CPoint point) { this->Invalidate(TRUE);但这并没有删除绘制的矩形。
    猜你喜欢
    • 1970-01-01
    • 2013-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-09
    相关资源
    最近更新 更多