【问题标题】:MFC selection of a user drawn rectangle on picture controlMFC 在图片控件上选择用户绘制的矩形
【发布时间】:2013-08-02 13:07:53
【问题描述】:

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

这是我绘制矩形的代码。

void PictureCtrl::OnLButtonDown(UINT nFlags, CPoint 点) {

// 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);

}

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

【问题讨论】:

    标签: mfc


    【解决方案1】:

    您需要将矩形的坐标存储在您的类中(也保存/加载)并在鼠标按下期间执行HitTest

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

    如果你有不止一个矩形,这一切都非常复杂,而且会变得更复杂! 这是一个DrawCLI MSDN example,它使用矩形、圆角矩形、椭圆、直线和多段线以及对 OLE 的支持来完成所有这些工作——也许这会有所帮助,在 DrawCLI 处于合并状态之前删除类/函数可能更容易与您的应用程序...

    【讨论】:

    • 感谢您的帮助。我查看了 DrawCLI 示例和许多其他示例,并注意到其中大多数都在文档上绘图。我希望能够做同样的事情,除了优化校准。我看到了一些示例,其中在调整大小后,文档需要调用 invalidate/update 方法来显示更改。我可以用图片控件做同样的事情吗?
    • 其实DrawCLI借鉴了View类——Document类只是保存数据,View类是数据的“视图”;我不明白为什么你不能使用优化校准,只要它有 OnDraw()OnPaint() 方法或类似的方法
    • 啊,好吧。无效/更新窗口是否会导致 OnDraw() 方法被执行?抱歉,我对 MFC 还很陌生。
    • InvalidateInvalidateRect 标记(部分)窗口需要重新绘制,无论是在下一个 WM_PAINT 消息发送到窗口时还是通过 UpdateWindow() 函数强制立即重新绘制时; OnPaint 函数处理 WM_PAINT 并进行绘图。如果您刚开始使用 MFC,最好将您的项目基于 DrawCLI 并支持它的文档/视图架构...
    猜你喜欢
    • 2018-04-16
    • 1970-01-01
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多