Visual c++ 借助工具栏在mfc中画一条线 我试图用VisualBasic C++ 6在MFC中画一个应用程序,我已经用创建函数创建了一个窗口,并且用工具线创建了一个工具栏,但是我一直坚持如何对该行进行编码,因为我知道的函数就像D.Layto(x,y)和d.MOVET(x2,y2)一样。但是它属于line函数,我该如何使用OnLButtonDown来捕捉坐标,或者有没有其他方法可以画一条线。。?任何帮助都很有用
请查看MFC Scribble教程: ) 它将让你开始如何处理鼠标点击和鼠标移动和绘图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
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
掌握了线索所有的标志都指向创建一些图形类来为您封装它,但是我希望这已经让你开始了。我计划在工具箱中添加一些颜色,使其类似于绘画,但我找不到任何帮助。你能帮我吗?我计划在工具箱中添加一些颜色,使其类似于绘画,但我找不到任何帮助。你能帮我吗。。?