MFC中画直线CDC::LineTo(POINT point)这个函数使用的疑问???

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MFC中画直线CDC::LineTo(POINT point)这个函数使用的疑问???相关的知识,希望对你有一定的参考价值。

CDC::LineTo
BOOL
LineTo(int
x,int
y
);
BOOL
LineTo(POINT
point)
返回值:如果直线已经绘制,则返回非零值,否则为0。
参数:
x
直线终点的X逻辑坐标。
y
直线终点的Y逻辑坐标。
point
指定直线终点,可以为该参数传递POINT结构或CPoint对象。
(注意这句话)
说明:
从当前位置开始划线到但并不包括由x和y(或point)指定的点。直线由选定的画笔绘制,当前位置设置为x,y或point。
我有个MFC类库详解
要的话可以传给你
参考技术A Cpoint(55,30)相当于在Lineto()函数前面写了Cpoint
point;point=(55,30);
下面那个同理!只不过是可以认为省略了定义指针的过程吧!
这些都是喜欢玩技巧的人才这么写,其实还是老老实实先定义再使用,这样程序的可读性会好很多!本回答被提问者采纳

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

【中文标题】借助工具栏在 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中画直线CDC::LineTo(POINT point)这个函数使用的疑问???的主要内容,如果未能解决你的问题,请参考以下文章

使用MFC编制基于对话框的Windows应用程序,实现画图功能

怎么在mfc中画曲线

在 Wpf C# 中画一条直线

matlab中画直线用啥函数

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

Unity使用UGUI的Image在Canvas中画直线