Visual c++ 借助工具栏在mfc中画一条线 我试图用VisualBasic C++ 6在MFC中画一个应用程序,我已经用创建函数创建了一个窗口,并且用工具线创建了一个工具栏,但是我一直坚持如何对该行进行编码,因为我知道的函数就像D.Layto(x,y)和d.MOVET(x2,y2)一样。但是它属于line函数,我该如何使用OnLButtonDown来捕捉坐标,或者有没有其他方法可以画一条线。。?任何帮助都很有用

Visual c++ 借助工具栏在mfc中画一条线 我试图用VisualBasic C++ 6在MFC中画一个应用程序,我已经用创建函数创建了一个窗口,并且用工具线创建了一个工具栏,但是我一直坚持如何对该行进行编码,因为我知道的函数就像D.Layto(x,y)和d.MOVET(x2,y2)一样。但是它属于line函数,我该如何使用OnLButtonDown来捕捉坐标,或者有没有其他方法可以画一条线。。?任何帮助都很有用,visual-c++,mfc,Visual C++,Mfc,请查看MFC Scribble教程: ) 它将让你开始如何处理鼠标点击和鼠标移动和绘图 M.看看MFC涂鸦教程: ) 它将让你开始如何处理鼠标点击和鼠标移动和绘图 M.好的,您必须重写几个成员函数才能执行此操作。我在下面概述了一种方法。我下面的示例处理一个单线绘制操作(从鼠标向下到鼠标向上)。对你来说,一个练习就是这样做,一旦你做了一个,你就可以在不同的地方做另一个。这很简单,顺便说一句 CWnd::OnLButtonDown(UINT _flags, CPoint _pt); CWnd::On

请查看MFC Scribble教程: )

它将让你开始如何处理鼠标点击和鼠标移动和绘图


M.

看看MFC涂鸦教程: )

它将让你开始如何处理鼠标点击和鼠标移动和绘图


M.

好的,您必须重写几个成员函数才能执行此操作。我在下面概述了一种方法。我下面的示例处理一个单线绘制操作(从鼠标向下到鼠标向上)。对你来说,一个练习就是这样做,一旦你做了一个,你就可以在不同的地方做另一个。这很简单,顺便说一句

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);
    }
}
//在文件的顶部
#包括
//在你们班
typedef std::vector PointVector;
点向量m_点;
CYourWnd::OnLButtonDown(UINT标志,CPoint点);
{
//注意:对于多套图纸,这将是不同的!
m_Points.clear();
m_点。向后推(点(_pt.x,_pt.y));
}
CYourWnd::OnMouseMove(UINT_标志,CPoint_pt);
{
如果(_标志和MK按钮)
{
const POINT和last(m_Points.back());
如果(_pt.x!=last.x | | u pt.y!=last.y)
{
m_点。向后推(点(_pt.x,_pt.y));
使无效();
}
}
}
CYourWnd::OnPaint()
{
CPaintDC dc(本);
正确的rcClient;GetClientRect(&rc);
FillSolidRect(&rcClient,RGB(255、255、255));
if(m_Points.size())
{
dc.MoveTo(m_点[0].x,m_点[0].y);
对于(PointsVector::size_类型p(1);
p
显然,这是一个粗糙的过程,只需进行一次绘图操作。一旦你再次按下左键,它会删除你所做的。所以,一旦你有了这个工作:

  • 这样你就可以画无限多的线了。您可以通过多种方式实现这一点,例如使用附加容器(用于存储向量),甚至可以使用绘图操作类将其存储在单个向量中,然后执行

  • 这个解决方案很可能会忽隐忽现。你怎么能阻止这一切?也许
    OnEraseBkgnd
    掌握了线索

  • 多点颜色怎么样


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

    好的,您必须重写几个成员函数才能完成此操作。我在下面概述了一种方法。我下面的示例处理一个单线绘制操作(从鼠标向下到鼠标向上)。对你来说,一个练习就是这样做,一旦你做了一个,你就可以在不同的地方做另一个。这很简单,顺便说一句

    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);
        }
    }
    
    //在文件的顶部
    #包括
    //在你们班
    typedef std::vector PointVector;
    点向量m_点;
    CYourWnd::OnLButtonDown(UINT标志,CPoint点);
    {
    //注意:对于多套图纸,这将是不同的!
    m_Points.clear();
    m_点。向后推(点(_pt.x,_pt.y));
    }
    CYourWnd::OnMouseMove(UINT_标志,CPoint_pt);
    {
    如果(_标志和MK按钮)
    {
    const POINT和last(m_Points.back());
    如果(_pt.x!=last.x | | u pt.y!=last.y)
    {
    m_点。向后推(点(_pt.x,_pt.y));
    使无效();
    }
    }
    }
    CYourWnd::OnPaint()
    {
    CPaintDC dc(本);
    正确的rcClient;GetClientRect(&rc);
    FillSolidRect(&rcClient,RGB(255、255、255));
    if(m_Points.size())
    {
    dc.MoveTo(m_点[0].x,m_点[0].y);
    对于(PointsVector::size_类型p(1);
    p
    显然,这是一个粗糙的过程,只需进行一次绘图操作。一旦你再次按下左键,它会删除你所做的。所以,一旦你有了这个工作:

  • 这样你就可以画无限多的线了。您可以通过多种方式实现这一点,例如使用附加容器(用于存储向量),甚至可以使用绘图操作类将其存储在单个向量中,然后执行

  • 这个解决方案很可能会忽隐忽现。你怎么能阻止这一切?也许
    OnEraseBkgnd
    掌握了线索

  • 多点颜色怎么样


  • 所有的标志都指向创建一些图形类来为您封装它,但是我希望这已经让你开始了。

    我计划在工具箱中添加一些颜色,使其类似于绘画,但我找不到任何帮助。你能帮我吗?我计划在工具箱中添加一些颜色,使其类似于绘画,但我找不到任何帮助。你能帮我吗。。?