如何在MFC中,点击左键画直线

yangyang_1987ai 2010-03-16 08:48:06
怎么样在MFC中画直线啊,要求是 在视图中点击左键,使各个点之间连成线?着急啊,请各位帮忙!!谢谢
...全文
577 30 打赏 收藏 转发到动态 举报
写回复
用AI写文章
30 条回复
切换为时间正序
请发表友善的回复…
发表回复
landy2017 2010-12-16
  • 打赏
  • 举报
回复
看看,,,,
康斯坦汀 2010-03-16
  • 打赏
  • 举报
回复
这种问题根本没法回答,因为说不清啊,MSDN中MFC自带的实例有专门鼠标拖动画图的,
自己找找。
tanwei1002 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yangyang_1987ai 的回复:]
tanwei1002 你的方法好像行不通啊。我的意思是: 在视图上点击左键,使各个点击之间的点连成线(应该是 :点画式),哪位高人再帮帮我啊
[/Quote]

服了你了
我那是两点间的画线,既然两点之间画线出来了,那各点之间的画线不是一回事,稍微改下就OK。。。。
要是这你也想不出来那也。。。。
yuznzhen426 2010-03-16
  • 打赏
  • 举报
回复
响应点击左键消息,记住两个点的坐标,划线就就可以
在 头文件中定义下面的变量
int num =0;
CPoint m_ptOrigin;
/////////
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
num++;
if(1==num)

m_ptOrigin=point; //记住第一次坐标


else if(2==num)
{
CClientDC dc(GetParent());
dc.MoveTo(m_ptOrigin);
dc.LineTo(point);
num=0;
}

CView::OnLButtonDown(nFlags, point);
}
MTH3678~ 2010-03-16
  • 打赏
  • 举报
回复
1.定义 vector<CPoint> vecLinePoint;
2.在OnLButtonDown();中令
vecLinePoint.pushback(point);

3.在OnLButtonUp();中
HDC hdc = ::GetDC(m_hWnd);

for(int i=0;i<vecLinePoint.size()-1;i++)
{
MoveToEx(hdc,vecLinePoint[i].x,vecLinePoint[i].y,NULL);
LineTo(hdc,vecLinePoint[i+1].x,vecLinePoint[i+1].y);
}
没调试过,应该是这个思路
neu_gis 2010-03-16
  • 打赏
  • 举报
回复
去看看VC中的一个例程就知道了,DrawCli是一个非常经典的绘图例程,是面向对象的,其实很多行业的绘图软件都有这个例程的影子在里面
yangyang_1987ai 2010-03-16
  • 打赏
  • 举报
回复
tanwei1002 你的方法好像行不通啊。我的意思是: 在视图上点击左键,使各个点击之间的点连成线(应该是 :点画式),哪位高人再帮帮我啊
finder_zhang 2010-03-16
  • 打赏
  • 举报
回复
6楼问得好啊,点画式还是拖画式?
点画式就简单,拖画式,想有WINDOWS自带画图工具的效果的话,做得就复杂一点啦.
klkvc386 2010-03-16
  • 打赏
  • 举报
回复
up........
你妹的特盗不 2010-03-16
  • 打赏
  • 举报
回复
BOOL mouse_PressDown=false;
CPoint point_Start;
上面是全局定义,也可以在.h文件中定义,不能在函数中定义

void Ctest1Dlg::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default

mouse_PressDown=true;
point_Start=point;
//ScreenToClient(&point_Start);
CDialog::OnLButtonDown(nFlags, point);
}

void Ctest1Dlg::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
if(mouse_PressDown)
{
CBitmap bitmap;
CDC memory_DC;
//ScreenToClient(&point);
CDC *dc;
CPen pen;
pen.CreatePen(0,2,RGB(255,255,255));
dc=this->GetDC();
CRect rect;
GetClientRect(&rect);
memory_DC.CreateCompatibleDC(dc);
bitmap.CreateCompatibleBitmap(dc,rect.Width(),rect.Height());
memory_DC.SelectObject(&bitmap);
memory_DC.SelectObject(&pen);
memory_DC.SetBkMode(TRANSPARENT);
memory_DC.MoveTo(point_Start);
memory_DC.LineTo(point);

dc->BitBlt(0,0,rect.Width(),rect.Height(),&memory_DC,0,0,SRCCOPY);
this->ReleaseDC(dc);
}
CDialog::OnMouseMove(nFlags, point);
}

void Ctest1Dlg::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
mouse_PressDown=false;
CDialog::OnLButtonUp(nFlags, point);
}


为什么画出的是背景是黑的,只有黑白两种颜色,郁闷中
许文君 2010-03-16
  • 打赏
  • 举报
回复
响应WM_LBUTTONDOWN记录左键次数,保存上次坐标并lineto
你妹的特盗不 2010-03-16
  • 打赏
  • 举报
回复
我来学习
ls2141 2010-03-16
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 tanwei1002 的回复:]
C/C++ code
1.定义起始位置点
CPoint m_pStart;
2.在OnLButtonDown(UINT nFlags, CPoint point)中
m_pStart = point;
3.在OnLButtonUp(UINT nFlags, CPoint point)中
HDC hdc = ::GetDC(m_hWnd);
MoveToEx(hdc,m_pStart.……
[/Quote]UP
tanwei1002 2010-03-16
  • 打赏
  • 举报
回复
1.定义起始位置点
CPoint m_pStart;
2.在OnLButtonDown(UINT nFlags, CPoint point)中
m_pStart = point;
3.在OnLButtonUp(UINT nFlags, CPoint point)中
HDC hdc = ::GetDC(m_hWnd);
MoveToEx(hdc,m_pStart.x,m_pStart.y,NULL);
LineTo(hdc,point.x,point.y);
::ReleaseDC(m_hWnd,hdc);
不动如岳 2010-03-16
  • 打赏
  • 举报
回复
添加消息响应函数就行了,看孙鑫教程
向立天 2010-03-16
  • 打赏
  • 举报
回复
你是想实现拖拽式的还是点画式的
如果拖拽要在按下左键时调用SetCapture
如果点画式就记录鼠标坐标就可以
每画完一条就就把记录point的值设为无效值
这样只要两个值都有效画就好了
yangyang_1987ai 2010-03-16
  • 打赏
  • 举报
回复
具体该怎么样实现呢? 在下是个菜鸟,还请大家多多帮忙
taofa817 2010-03-16
  • 打赏
  • 举报
回复
在WM_LBUTTONDOWN消息内捕获鼠标坐标点
然后用moveto lineto即可
yangyang_1987ai 2010-03-16
  • 打赏
  • 举报
回复
那怎样捕获 下次点击 左键时 的 点呢?谢谢各位朋友
ouyh12345 2010-03-16
  • 打赏
  • 举报
回复
教程上有啊
记住上次点的坐标
加载更多回复(10)

16,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧