图片控件上用户绘制矩形的MFC选择

图片控件上用户绘制矩形的MFC选择,mfc,Mfc,我正在尝试创建一个界面,允许用户在图片控制框上绘制一个矩形。我有一个picture控件类,并使用CRectTracker允许用户绘制一个矩形。我希望用户也能够选择以前绘制的矩形,但我不知道如何处理绘制矩形的选择。 我希望能够选择矩形,并在其上添加调整大小处理程序 这是我绘制矩形的代码 void PictureCtrl::OnLButtonDownUINT nFlags,CPoint point { } 任何帮助都将不胜感激。谢谢。您需要在类中存储矩形的坐标,还需要在鼠标按下时保存/加载并执行命中

我正在尝试创建一个界面,允许用户在图片控制框上绘制一个矩形。我有一个picture控件类,并使用CRectTracker允许用户绘制一个矩形。我希望用户也能够选择以前绘制的矩形,但我不知道如何处理绘制矩形的选择。 我希望能够选择矩形,并在其上添加调整大小处理程序

这是我绘制矩形的代码

void PictureCtrl::OnLButtonDownUINT nFlags,CPoint point {

}


任何帮助都将不胜感激。谢谢。

您需要在类中存储矩形的坐标,还需要在鼠标按下时保存/加载并执行命中测试

要实现调整大小控制柄,您需要一个布尔值来表示选定矩形,如果单击不在矩形上,则将布尔值设置为FALSE;如果布尔值为TRUE,则在绘制期间绘制抓取控制柄;如果鼠标在抓取手柄上移动,请更改鼠标光标,在这种情况下,在鼠标下移和鼠标上移期间执行调整大小

这一切都相当复杂,如果你有一个以上的矩形,会变得更复杂!
这是一个通过矩形、圆角矩形、椭圆、直线和多段线以及对OLE的支持来实现所有这些功能的应用程序。这可能会有所帮助,在DrawCLI处于与应用程序合并的状态之前,从DrawCLI中删除类/函数可能会更容易…

感谢您的帮助。我查看了DrawCLI示例和许多其他示例,发现其中大多数都是在文档上绘制的。我希望能够做同样的事情,除了通过图片控件。我看到一些例子,在调整大小之后,文档需要调用invalidate/update方法来显示更改。我可以对图片控件执行同样的操作吗?实际上,DrawCLI使用View类—Document类只是保存数据,View类是数据的视图;我不明白为什么你不能在你的图片控件上画画,只要它有OnDraw或OnPaint方法或类似的东西。使窗口失效/更新是否会导致执行OnDraw方法?对不起,我是MFC的新手。当下一个WM_PAINT消息发送到窗口或UpdateWindow函数强制立即重新绘制时,将窗口的一部分标记为需要重新绘制;该函数处理WM_绘制并绘制图形。如果您刚刚开始使用MFC,那么最好将项目基于DrawCLI,并支持它的文档/视图体系结构。。。
// If mouse click is outside of rectangle
if(m_drawRect.m_tracker.HitTest(point) < 0 ) {
    if(m_drawRect.m_tracker.TrackRubberBand(this, point, TRUE)) {
        CDC* pDC = GetDC();

        m_drawRect.m_tracker.m_nStyle &= CRectTracker::resizeInside;


        // Paint transparent rectangle
        pDC->SelectStockObject(NULL_BRUSH);
        pDC->Rectangle(m_drawRect.m_tracker.m_rect);

        ReleaseDC(pDC);


    }
} 

CStatic::OnLButtonDown(nFlags, point);