如何在MFC中用鼠标画直线

而且能不能用鼠标控制它移动... 而且能不能用鼠标控制它移动 展开
 我来答
你脱目睹恶龙
2018-12-05
知道答主
回答量:1
采纳率:0%
帮助的人:802
展开全部

类向导添加响应函数(三个)

编辑代码

void CView::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

::SetCursor(LoadCursor(NULL, IDC_ARROW));

//注意以下几个变量要在头函数中定义

//bool m_Dragging; CPoint m_PointOrigin;CPoint m_PointOld;

m_Dragging = 1;

m_PointOrigin = point;

m_PointOld = point;

SetCapture();

RECT Rect;

GetClientRect(&Rect);

ClientToScreen(&Rect);

::ClipCursor(&Rect);

CScrollView::OnLButtonDown(nFlags, point);

}

void CView::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

if (m_Dragging)

{

CClientDC dc(this);

dc.SetROP2(R2_NOT);

dc.MoveTo(m_PointOrigin);

dc.LineTo(m_PointOld);

dc.MoveTo(m_PointOrigin);

dc.LineTo(point);

m_PointOld = point;

}

CScrollView::OnMouseMove(nFlags, point);

}

void CView::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: 在此添加消息处理程序代码和/或调用默认值

CClientDC dc(this);

if (m_Dragging)

{

m_Dragging = 0;

::ReleaseCapture();

::ClipCursor(NULL);

dc.SetROP2(R2_NOT);

dc.MoveTo(m_PointOrigin);

dc.LineTo(m_PointOld);

dc.MoveTo(m_PointOrigin);

dc.LineTo(point);

m_PointOld = point;

}

CScrollView::OnLButtonUp(nFlags, point);

}

结果截图

道也大不同7678
推荐于2016-04-18 · TA获得超过103个赞
知道答主
回答量:45
采纳率:0%
帮助的人:51万
展开全部
OnLButtonDown(UINT nFlags, CPoint point)
{
::SetCursor(m_HCross);
m_Dragging=1;
m_PointOrigin=point;
m_PointOld=point;
SetCapture();
RECT Rect;
GetClientRect(&Rect);
ClientToScreen(&Rect);
::ClipCursor (&Rect);
CView::OnLButtonDown(nFlags, point);
}

OnMouseMove(UINT nFlags, CPoint point)
{
if(m_Dragging)
{
CClientDC dc(this);
dc.SetROP2 (R2_NOT);

dc.MoveTo (m_PointOrigin);
dc.LineTo (m_PointOld);
dc.MoveTo (m_PointOrigin);
dc.LineTo (point);
m_PointOld=point;
}

CView::OnMouseMove(nFlags, point);
}

OnLButtonUp(UINT nFlags, CPoint point)
{ CClientDC dc(this);

if(m_Dragging)
{
m_Dragging=0;
::ReleaseCapture ();
::ClipCursor (NULL);

dc.SetROP2 (R2_NOT);
dc.MoveTo (m_PointOrigin);
dc.LineTo (m_PointOld);
dc.MoveTo (m_PointOrigin);
dc.LineTo (point);
m_PointOld=point;

}

CView::OnLButtonUp(nFlags, point);
}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
chen若愚
2010-05-08
知道答主
回答量:22
采纳率:0%
帮助的人:20.6万
展开全部
首先通过鼠标左键按下和鼠标左键弹起消息捕捉要画线的两个点,并存在CPoint类的对象中;然后在OnPaint()函数中用MoveTo(左键按下的点)和LineTo(左键弹起的点),这样就可以画线了,当然你可以用CPen类对象修改线条的颜色、样式和粗细
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友468bee91c
2010-05-07 · 超过25用户采纳过TA的回答
知道答主
回答量:59
采纳率:0%
帮助的人:0
展开全部
用鼠标划线,用Device context ,即设备上下文,用来在画布上划线和作图的。里面有很多工具,自己去查资料吧。用moveto(x,y)和Lineto(x,y);函数就可以了。

用鼠标控制也可以实现,也就是在mousemove中加点代码,让线随着鼠标做运动。动脑子好好想想吧,代码就不贴了。好久没用过VC了,呵呵
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式