mfc中画图的疑惑

yuwei2589 2008-11-24 11:27:04
我想在mfc中实现下面的功能,但是存在一些问题,想请教。

要求:鼠标按下,确定一线段的起始点,然后拖动鼠标,要求线段随着鼠标而移动,直到松开鼠标键,在整个过程中存在唯一的一线段。
我的想法是:按下鼠标键记录下原始点,然后在mousemove的时候记录下第2个点,画线段,可在拖动过程中,怎么保持只存在一条线段呢?

属新手,望不吝赐教。多谢!
...全文
80 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
biaozai06 2008-11-24
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 yuwei2589 的回复:]
引用 2 楼 cremesino 的回复:
在mousemove的时候把已有的整个擦除,重画

擦除整个画面吗?可是我还想画完一条线段时,继续画线段的时候原先的那根线段还在画面上。
我还想了解下擦除和重画怎么实现?对这块特别模糊。
[/Quote]

在mousemove函数里面动态更新一个全局CPoint,并且调用Invalidate()函数刷新界面
然后在WM_PAINT消息处理函数里从起点到CPoint画线

这样做就不用自己擦除之前所画的线了
yuwei2589 2008-11-24
  • 打赏
  • 举报
回复
to oakfire:
能把反色说详细点吗?或者给个简单的实现。谢谢
oakfire 2008-11-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cremesino 的回复:]
在mousemove的时候把已有的整个擦除,重画
[/Quote]

用这个办法。擦除操作你可以用反色把之前的线重画一遍。
yuwei2589 2008-11-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 cremesino 的回复:]
在mousemove的时候把已有的整个擦除,重画
[/Quote]
擦除整个画面吗?可是我还想画完一条线段时,继续画线段的时候原先的那根线段还在画面上。
我还想了解下擦除和重画怎么实现?对这块特别模糊。
yuwei2589 2008-11-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 yuhudie203 的回复:]
移动鼠标时在mousemove里会记录下一连串的点
如果你在里面用lineto则会是一连串的线
把lineto移到mousemove外画图~
[/Quote]
那该什么时候画呢?在松开键吗?那不是在拖动过程中没有线段了?
cremesino 2008-11-24
  • 打赏
  • 举报
回复
在mousemove的时候把已有的整个擦除,重画
yuhudie203 2008-11-24
  • 打赏
  • 举报
回复
移动鼠标时在mousemove里会记录下一连串的点
如果你在里面用lineto则会是一连串的线
把lineto移到mousemove外画图~
kier2 2008-11-24
  • 打赏
  • 举报
回复
可以用MFC提供的 CPtrArray类,把每条线段的起始点与终点保存起来,在ondraw函数里绘制这些点代表的线段。其中起始点就是鼠标按下的点,终点是鼠标左键松开的点。
yuwei2589 2008-11-24
  • 打赏
  • 举报
回复
在这些的基础上,还有个问题:怎么把画过的线段保留在画面上?
我想画多条线段,并且线段的产生方式都是通过鼠标拖动,在松开鼠标后,线段才定型。

15,979

社区成员

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

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