文档视图 mousemove 中画线,

zhu6789888 2010-06-23 06:31:06
我在文档视图的工程中,

mousemove()中

CClientDC dc(this);
SetCursor(AfxGetApp()->LoadStandardCursor(IDC_CROSS));
//画线
dc.MoveTo(m_LbtDown); //LbtDown 记录鼠标左键点击位置
dc.LineTo(point);

////刷新界面
//Invalidate(FALSE); 加上这句来刷新界面的话,会很闪,描画出来的线若影若显,

不加这句的话,会描画出很多的线,

我只想一条线跟着鼠标走,怎做呢?怎么察除之前的线呢?
...全文
112 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhu6789888 2010-06-24
  • 打赏
  • 举报
回复
二楼的方法改成 这样 就OK乐


设置异或模式以擦除以前的直线
int nOldMode=SetROP2(R2_NOT)
//清旧线
dc.MoveTo(m_LbtDown_old); //LbtDown_old 上一次记录的鼠标左键点击位置
dc.LineTo(point_old); //上一次 point_old
//画新线
dc.MoveTo(m_LbtDown); //LbtDown 记录鼠标左键点击位置
dc.LineTo(point);
//放最后
SetROP2(nOldMode);//恢复
程老师2088 2010-06-24
  • 打赏
  • 举报
回复
二楼的方法是对的,对于画线我觉得没必要用双缓冲。

二楼的方法俗称橡皮筋,是吧,哈哈~~
zhu6789888 2010-06-24
  • 打赏
  • 举报
回复
SetROP2 函数好像可以用来察除以前画的线,可是,也把我的背景给察除了,我使用R2_NOT 和R2_NOTXORPEN
都不行呢
zhu6789888 2010-06-24
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 zyrr159487 的回复:]
引用 2 楼 3jaja 的回复:
设置异或模式以擦除以前的直线
int nOldMode=SetROP2(R2_NOT)
//清旧线
dc.MoveTo(m_LbtDown_old); //LbtDown_old 上一次记录的鼠标左键点击位置
dc.LineTo(point_old); //上一次 point_old
SetROP2(nOldMode);//恢复
//画新线
dc……
[/Quote]
呵呵,谢谢了
zyrr159487 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 3jaja 的回复:]
设置异或模式以擦除以前的直线
int nOldMode=SetROP2(R2_NOT)
//清旧线
dc.MoveTo(m_LbtDown_old); //LbtDown_old 上一次记录的鼠标左键点击位置
dc.LineTo(point_old); //上一次 point_old
SetROP2(nOldMode);//恢复
//画新线
dc.MoveTo(m_LbtDown);……
[/Quote]
补充几句
dc.LineTo(point);
point_old = point;
m_LbtDown_old = m_LbtDown;
zhu6789888 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 fangongdalu7148 的回复:]
楼主 如果闪屏的话 就用双缓冲,mousemove 记录鼠标坐标 然后 Invalidate(FALSE);
然后在 ondraw函数里画图 并使用双缓冲。
[/Quote]

太麻烦,谢谢~
zhu6789888 2010-06-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 3jaja 的回复:]
设置异或模式以擦除以前的直线
int nOldMode=SetROP2(R2_NOT)
//清旧线
dc.MoveTo(m_LbtDown_old); //LbtDown_old 上一次记录的鼠标左键点击位置
dc.LineTo(point_old); //上一次 point_old
SetROP2(nOldMode);//恢复
//画新线
dc.MoveTo(m_LbtDown);……
[/Quote]

恩,我就是想檫除 以前的直线 ,好像矩形框有个函数就是用来檫除以前的,

明天试试这位大侠的方法。
zgsdzhaolanxiang1 2010-06-23
  • 打赏
  • 举报
回复
楼主 如果闪屏的话 就用双缓冲,mousemove 记录鼠标坐标 然后 Invalidate(FALSE);
然后在 ondraw函数里画图 并使用双缓冲。
3jaja 2010-06-23
  • 打赏
  • 举报
回复
设置异或模式以擦除以前的直线
int nOldMode=SetROP2(R2_NOT)
//清旧线
dc.MoveTo(m_LbtDown_old); //LbtDown_old 上一次记录的鼠标左键点击位置
dc.LineTo(point_old); //上一次 point_old
SetROP2(nOldMode);//恢复
//画新线
dc.MoveTo(m_LbtDown); //LbtDown 记录鼠标左键点击位置
dc.LineTo(point);
qq515383106 2010-06-23
  • 打赏
  • 举报
回复
学习,我也不会

16,472

社区成员

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

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

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