在客户区内先固定一个点,然后在客户区画一条直线,使得直线的一端在固定点,而另外一端是鼠标所指示的那一点,直线随着鼠标的移动而移动,而且只显示现在鼠标所在位置的那条直线,我试过,可是鼠标所走过的那些位置所画的直线都留了下来,并没有消除而只留下当前所画的直线。问题出在哪里了呢??????
解决方案 »
- MAKELONG()函数做什么用?
- vc.net的工程如何在vc6.0下打开
- CTypedPtrList<CObList,CLine*>问题
- 关于Ado被聚合的问题!(送100分)
- 如何修改注册表中REG_MULTI_SZ类型的值?
- 又一个不相关的问题,但是很有意思,请各位发言
- windwos如何和交换机通过串口通讯,在不知道协议的情况下
- 是否可以动态的添加多个ComboBox控件到程序中指定的不同位置呢?
- ?我是一个初学者,用过一段时间的TC,C++语法也看过一些,但没有学过SDK(一点也不懂),想学VC++可以吗?
- 求高手帮忙把我的人力资源管理系统与工资管理系统合起来,急
- 串口问题
- 弄了一个晚上还是没办法通过编译,大家帮帮忙了,唉。。。
用CPoint记住前一次鼠标的位置,
在画下一个点的时候,
把原来的那条线(起点与鼠标位置的那条线)用背景色画,
当前的线就用你自己所定义的线画就行了。
楼主的问题是不是前面一次画的线没处理掉啊?
重画一下对话框
ddc.LineTo(mPointOld);
dc.MoveTo(mPointOrign);
dc.LineTo(point);
mPointOld=point;
最后OnLButtonUp时再Invalidate(),再画一条线应该就行吧
视图比较耗时间,需要额外处理画面闪烁的问题
擦除的问题则在于背景不单一时有问题,会将原本非背景色的地方变成背景色比较理想的方法应该这样:
1. 在 OnLButtonDwon 里记录起点
2. 在 OnMouseMove 里不断的读取鼠标的当前位置,同时记录上一个点的位置
用 SetROP2(R2_XORPEN) 将画笔设为异或模式
接下来画两条线,一条从起点到上一点、一条从起点到当前点
将当前点保存为上一点
3. 在 OnLButtonUp 里读取终点位置
先画一条从起点到上一点的线
将画笔模式设为 SetROP2(R2_COPYPEN) 正常模式
此时才真正的画一条从起点到终点的线
//------------------------------------------------------
采用橡皮筋就可以了....
在消息响应函数OnMouseMove( )中 CClientDC dc( this );
dc.SetROP2( R2_NOT ); //少不了...
dc.MoveTo(mPointOrign);
ddc.LineTo(mPointOld);
dc.MoveTo(mPointOrign);
dc.LineTo(point);
mPointOld=point;