MFC画线为什么反应那么迟钝?

wumuzi 2010-12-24 01:13:34
CClientDC dc(this);
dc.MoveTo(m_ptOriginal);
dc.LineTo(point);
用了这三条语句,结果运行的时候用鼠标画线反应很迟钝,画完一条线非得用鼠标点击一下才能显示出来所画的线条。程序放在别人的电脑上都没问题的,我系统是win7的。
...全文
452 21 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
roxma 2012-01-16
  • 打赏
  • 举报
回复
看视频上的效果和我电脑上运行的效果不一样
我这里总是反应迟钝。。。
roxma 2012-01-16
  • 打赏
  • 举报
回复
用的是孙鑫的代码
roxma 2012-01-16
  • 打赏
  • 举报
回复
我也遇到了同样的问题
ccforyou 2011-09-09
  • 打赏
  • 举报
回复
我的也是一样的问题 不过在lineto后添加m_ptOriginal=point后就可以比较顺利的划出线来了 我的也是win7系统
dxshenhua 2011-01-21
  • 打赏
  • 举报
回复
既然还在练习画线,可以理解!
向立天 2011-01-20
  • 打赏
  • 举报
回复
您好
我是本版版主
此帖已多日无人关注
请您及时结帖
如您认为问题没有解决可按无满意结帖处理
另外本版设置了疑难问题汇总帖
并已在版面置顶
相关规定其帖子中有说明
您可以根据规定提交您帖子的链接
如您目前不想结帖只需回帖说明
我们会删除此结帖通知

见此回复三日内无回应
我们将强制结帖

相关规定详见界面界面版关于版主结帖工作的具体办法
chen_freecom 2010-12-24
  • 打赏
  • 举报
回复

void CMyDlg::OnLButtonDown(UINT,CPoint point)
{
SetCapture();
m_pre=point;
return;
}
void CMyDlg::OnLButtonUp(UINT,CPoint point)
{
if(GetCapture() != this)
return;
CClientDC dc(this);
dc.MoveTo(m_pre);
dc.LineTo(point);
ReleaseCapture();
return;
}

void CMyDlg::OnMouseMove(UINT,CPoint point)
{
if(GetCapture() != this)
return;
CClientDC dc(this);
dc.MoveTo(m_pre);
dc.LineTo(point);
m_pre=point;
return;
}


psbeond 2010-12-24
  • 打赏
  • 举报
回复
不在OnPaint中绘图,再怎么搞也都是徒劳。如果不在OnPaint中。不调用Invalidate还好, 一调用,更什么也看不见了。Invalidate就是通知OnPaint来画图的,你如果不在OnPaint中画。界面一刷新,什么都没了。
varding 2010-12-24
  • 打赏
  • 举报
回复
Invalidate()刷新整个客户区或者InvalidateRect()刷新你刚才画线的区域,然后调用UpdateWindow()

不调用这个你画的东西不会自动显示出来的
Eleven 2010-12-24
  • 打赏
  • 举报
回复
Down和Up的时候记下起点和终点,在OnPaint函数中去绘图。
Up的最后InvalidateRect强制刷新一下就行了
wumuzi 2010-12-24
  • 打赏
  • 举报
回复
下面是我的代码(功能就是画一条连续的线)

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值

m_ptOriginal = point; //m_ptOriginal是起始点变量
LButtonState = TRUE; //LButtonState是我自己定义的一个鼠标左键按下的标志变量
CView::OnLButtonDown(nFlags, point);
}

void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
LButtonState = FALSE; //LButtonState是我自己定义的一个鼠标左键按下的标志变量
CView::OnLButtonUp(nFlags, point);
}

void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CPen pen(PS_SOLID,10,RGB(0,0,255));
CClientDC dc(this);
CPen *oldPen = dc.SelectObject(&pen);

if(LButtonState)
{
dc.MoveTo(m_ptOriginal);
dc.LineTo(point);
m_ptOriginal = point;
}

dc.SelectObject(&oldPen);
CView::OnMouseMove(nFlags, point);
}


这个在xp机器上没事,但我的win7系统上运行总是一会儿正常,一会儿显示线条反应迟钝,不知道是不是系统的问题
mayudong1 2010-12-24
  • 打赏
  • 举报
回复
看错了,权当灌水了
苏克贝塔03 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wumuzi520 的回复:]
引用 1 楼 visualeleven 的回复:
你的代码放在哪个函数中写的?

OnLbuttonDown保存起始点,
那三句话就放在OnLButtonUp函数中
[/Quote]
那当然是BtnUp才画线啊,你都说了
mayudong1 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 wumuzi520 的回复:]
引用 1 楼 visualeleven 的回复:
你的代码放在哪个函数中写的?

OnLbuttonDown保存起始点,
那三句话就放在OnLButtonUp函数中
[/Quote]


在 LButtondDown中你不点一下怎么让它去画呢?
无边1 2010-12-24
  • 打赏
  • 举报
回复
对不起 错了
无边1 2010-12-24
  • 打赏
  • 举报
回复
再加一句Invalidate
wumuzi 2010-12-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 visualeleven 的回复:]
你的代码放在哪个函数中写的?
[/Quote]
OnLbuttonDown保存起始点,
那三句话就放在OnLButtonUp函数中
向立天 2010-12-24
  • 打赏
  • 举报
回复
绘图函数应该放到OnPaint中
Eleven 2010-12-24
  • 打赏
  • 举报
回复
你的代码放在哪个函数中写的?

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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