借助工具栏在 mfc 中画一条线

Posted

技术标签:

【中文标题】借助工具栏在 mfc 中画一条线【英文标题】:Draw a line in mfc with help of toolbar 【发布时间】:2011-01-13 13:27:37 【问题描述】:

我正在尝试使用 visul basic c++ 6.0 在 MFC 中创建一个绘图应用程序我知道的函数类似于 d.lineTo(x,y) 和 d.Moveto(x2,y2) 但它属于行函数我如何使用 OnLButtonDown 来捕获 co-ordiantes 或者有什么其他方法可以绘制线 ..?任何帮助都会很有用

【问题讨论】:

【参考方案1】:

看看 MFC Scribble 教程: http://msdn.microsoft.com/en-us/library/aa716527%28v=vs.60%29.aspx)

它将让您开始了解如何处理鼠标单击和鼠标移动和绘图。

M.

【讨论】:

我计划在工具箱中添加一些颜色,使其类似于绘画,但我找不到任何帮助,你能帮忙吗..?【参考方案2】:

好的,您将不得不重写几个成员函数来执行此操作。我在下面概述了一种方法。下面的示例处理单个画线操作(从鼠标向下到鼠标向上)。对你来说,一个练习是让它一旦你完成了一个,你就可以在不同的地方做另一个。顺便说一句,这很容易!

CWnd::OnLButtonDown(UINT _flags, CPoint _pt);
CWnd::OnLButtonUp(UINT _flags, CPoint _pt);
CWnd::OnMouseMove(UINT _flags, CPoint _pt);
CWnd::OnPaint()

如果其中一些函数签名有误,我们深表歉意!将一些成员添加到您的窗口类:

// at the top of your file
#include <vector>

// in your class
typedef std::vector<POINT> PointVector;
PointVector m_Points;


CYourWnd::OnLButtonDown(UINT _flags, CPoint _pt);

    // NOTE: For more than one set of drawing, this will be different!
    m_Points.clear();
    m_Points.push_back(POINT(_pt.x, _pt.y));


CYourWnd::OnMouseMove(UINT _flags, CPoint _pt);

    if(_flags & MK_LBUTTON)
    
        const POINT& last(m_Points.back());
        if(_pt.x != last.x || _pt.y != last.y)
        
            m_Points.push_back(POINT(_pt.x, _pt.y));
            Invalidate();
        
    


CYourWnd::OnPaint()

    CPaintDC dc(this);
    CRect rcClient; GetClientRect(&rc);
    FillSolidRect(&rcClient, RGB(255, 255, 255));

    if(m_Points.size())
    
        dc.MoveTo(m_Points[0].x, m_Points[0].y);
        for(PointsVector::size_type p(1);
            p < m_Points.size();
            ++p)
           dc.LineTo(m_Points[p].x, m_Points[p].y);
    

显然,这是粗略的,只给你一个绘图操作。再次单击左下按钮后,它会删除您所做的事情。所以,一旦你有这个工作:

    制作它以便您可以绘制无限数量的线条。您可以通过多种方式完成此操作,例如额外的容器(用于存储向量),甚至可以存储在单个向量中然后执行的绘图操作类。

    此解决方案可能会闪烁。你怎么能阻止这一切?或许OnEraseBkgnd掌握了线索……

    更多颜色怎么样?

所有迹象都指向为您创建一些封装它的绘图类,但我希望这已经让您开始了。

【讨论】:

以上是关于借助工具栏在 mfc 中画一条线的主要内容,如果未能解决你的问题,请参考以下文章

在 QML 的圆形路径中画一条线?

在现代 OpenGL 中画一条线

如何在 Sprite-kit 中画一条线

在jetpack compose中画一条线

在自定义视图中画一条线

如何在Sprite-kit中画一条线