我想做个程序,用于画图,显示效果象大多绘图软件一样,例如在划线时,单击左键后得到第一个端点坐标,此时移动光标(左键状态为按下)会出现一条第一个端点到光标之间的闪烁虚线,左键弹起后决定第二个端点,绘制一条直线,应该怎样实现,如果在 OnMouseMove()中添加代码,不断绘制当前坐标与第一个端点之间的连线,然后以背景色擦除原来的临时虚线,直到确定终点后才绘制,有个问题是效率会不会高,而且不停的刷新,擦除背景会把原来划的内容擦除掉,请问大虾应该怎么处理,大家给个思路吧!谢谢!
解决方案 »
- 关于MFC oninitdialog 的问题..
- 请教各位大虾,我在VC里读取一个文件的内容,保存在一个变量中。怎么样可以一直使用这个变量,而不用重复读取这个文件呢???
- 如何从CImageList得到HBITMAP?
- 奇怪的queue.pop()(没分了,以后补上)
- 哪里有介绍高质量数字减影算法的文章或资料呀??
- 如何擦掉绘制的直线?
- 如何将一个ip 包直接发送到目的主机
- NetAdmin(类似Sinff)已经升级,欢迎大家下载(没分)
- vc++.net编译器问题
- 如何将键盘按键消息传递给一个当前不活动的窗口?
- vc实现串口同步通信问题
- 从算法的角度来看,矢量图光栅化和图像(像素图)缩小后,哪个更清晰些?
不过要闪烁的还得自己做.
1楼 橡皮框代码怎么查找 我没找到
2楼 知识不够CRectTracker看了还是不会使用 能不能给个例子(MSDN也行)
3楼 CDC::SetROP2(R2_XORPEN)是在OnMouseMove中调用吧
我试了下 没有效果,不知道哪弄错了我在OnMouseMove里加入的代码
if(m_nStatus == LINE){
CClientDC dc(this);
dc.SetROP2(R2_XORPEN);
dc.MoveTo(m_pt1);
dc.LineTo(point);
}
CPoint m_ptLast;
if(m_nStatus == LINE)
{
CClientDC dc(this);
int nOldMode = dc.SetROP2(R2_XORPEN);
dc.MoveTo(m_pt1);
dc.LineTo(m_ptLast); dc.MoveTo(m_pt1);
dc.LineTo(point); m_ptLast = point; dc.SetROP2(nOldMode); //还原
}在鼠标按下时要这样: dc.MoveTo(m_pt1);
dc.LineTo(point);
m_ptLast = point;鼠标台起来时还要来一次:
int nOldMode = dc.SetROP2(R2_XORPEN);
dc.MoveTo(m_pt1);
dc.LineTo(m_ptLast); dc.SetROP2(nOldMode); //还原
http://www.cppblog.com/wlwlxj