急求:MFC怎样画线??

zhangjie199011087 2009-12-03 10:19:51
如题,不要告诉我直接pDC->MoveTo();然后pDC->LineTo();这个我会,我想要的是和我们电脑上那种绘图画线程序。我用过this->Invalidate();效果可想而知的烂,先谢谢大家了。
...全文
1334 41 打赏 收藏 转发到动态 举报
写回复
用AI写文章
41 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangjie199011087 2009-12-10
  • 打赏
  • 举报
回复
谢谢大家的回复,我用双缓冲解决了。
shmily_inter 2009-12-07
  • 打赏
  • 举报
回复
moveto lineto
snowying2008 2009-12-07
  • 打赏
  • 举报
回复
划线最终还是Moveto Lineto
Conry 2009-12-07
  • 打赏
  • 举报
回复
msdn的drawcli例子
zhangjie199011087 2009-12-06
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 jszj 的回复:]
楼主自己都没有考虑如何去实现,只是在这里只叫,那如何让大家回答?
程序,就是它按照你给的逻辑来运行,就这样。所以楼主好好考虑一下其中的逻辑,然后去实现就行了,碰到具体问题时再来问,这样效率会高很多

整体思路:
1. 记录你的鼠标事件
2. 在OnPaint()里按照你记录的鼠标事件(主要是位置和形状)逐个画图
[/Quote]
其实没见得你的水平有多么高。整体思路和没说一样,我也知道,但是现在就是屏幕闪烁。无法解决才提出来啊!
zhangjie199011087 2009-12-06
  • 打赏
  • 举报
回复
感谢大家的回答,但是我想说的是大家应该知道,当你刚学一个东西时候,很多东西不知道怎样用这个领域的专业术语来表达。我想问的是画线问题,怎样避免闪烁。
langbing2009 2009-12-06
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 ltmit 的回复:]
lz的问题要使用双缓冲技术。简单点讲就是:
1.先定义一个新的dc并关联位图,创建一个足够大的绘制空间。
2.在新dc上绘图。
3.在你的窗口的重绘事件里直接往屏幕绘制前面的dc。

注意慎用Invalidate。
[/Quote]
ltmit 2009-12-06
  • 打赏
  • 举报
回复
lz的问题要使用双缓冲技术。简单点讲就是:
1.先定义一个新的dc并关联位图,创建一个足够大的绘制空间。
2.在新dc上绘图。
3.在你的窗口的重绘事件里直接往屏幕绘制前面的dc。

注意慎用Invalidate。
yujunnb 2009-12-06
  • 打赏
  • 举报
回复
MSDN 里面有例子啊,就是Scrible的例子,一共 有7个 很详细
ediex 2009-12-06
  • 打赏
  • 举报
回复
你说是非常有名的橡皮筋效果,网上搜一上就可以了。很多入门书上有的。
sky9988227 2009-12-06
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 forwin 的回复:]
C/C++ code CRect rcClient;
CDC MemDC;
CBitmap MemBitmap;

GetClientRect(rcClient);
MemDC.CreateCompatibleDC(NULL);
MemBitmap.CreateCompatibleBitmap(pDC,rcClient.Width()-20,rcClient.Height()-20);
MemDC.SelectObject(&MemBitmap);//背景 MemDC.FillSolidRect(rcClient, (COLORREF)RGB(0,0,0));//---在这儿画图--------------- MemDC.MoveTo(1,1);
MemDC.LineTo(100,100);//---------------
pDC->BitBlt(0,0,rcClient.Width(),rcClient.Height(),&MemDC,0,0,SRCCOPY);

另外修改OnEraseBkgnd
C/C++ code
BOOL Cxxxxxx::OnEraseBkgnd(CDC* pDC)
{// TODO: Add your message handler code here and/or call defaultreturntrue;//return CView::OnEraseBkgnd(pDC);}

这样就不闪了
[/Quote]
这个方法是正确的,在内存中话,把OnEraseBkgnd(CDC* pDC)
消息return TRUE;就可以了
sky9988227 2009-12-06
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 zhangjie199011087 的回复:]
可不可以详细一点啊!
[/Quote]
这个方法是正确的,在内存中话,把OnEraseBkgnd(CDC* pDC)
消息return TRUE;就可以了
周成风 2009-12-05
  • 打赏
  • 举报
回复
google 绘制模式
wangszbj 2009-12-05
  • 打赏
  • 举报
回复
把下次画线的起点定在上次的终点!
red-fly 2009-12-05
  • 打赏
  • 举报
回复
楼主自己都没有考虑如何去实现,只是在这里只叫,那如何让大家回答?
程序,就是它按照你给的逻辑来运行,就这样。所以楼主好好考虑一下其中的逻辑,然后去实现就行了,碰到具体问题时再来问,这样效率会高很多

整体思路:
1. 记录你的鼠标事件
2. 在OnPaint()里按照你记录的鼠标事件(主要是位置和形状)逐个画图
zhouzhipen 2009-12-05
  • 打赏
  • 举报
回复
一般而言专业的绘图软件都有自己的图形库,不是采用GDI实现的.
o_yale_o 2009-12-05
  • 打赏
  • 举报
回复
还是Moveto,lineto + 双缓冲+局部刷新

不同的水平做出来效果N大差别
  • 打赏
  • 举报
回复
学习不用moveto lineto的画线方法!
wgf42421 2009-12-05
  • 打赏
  • 举报
回复
moveto lineto
yinghuashihun 2009-12-04
  • 打赏
  • 举报
回复
moveto lineto 只是画线,一旦,重画后,就会出现你所说的情况,只有对要画线的地方,对应的像素进行改变,才能保证重画后不会闪烁
加载更多回复(21)

16,472

社区成员

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

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

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