借助工具栏在 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 中画一条线的主要内容,如果未能解决你的问题,请参考以下文章