直线的“橡皮筋”画法

 

微软的画图程序中画直线时,会有画线提示,形象的说就像“橡皮筋”一样,在未最终确定直线的长度和角度前都会有一根类似“橡皮筋”的直线,便于客户可以方便的画出理想的直线,具体实现方法如下:

void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
 m_bDraw = true;
 m_ptOrigin = point;
 m_ptEnd = point;
 CView::OnLButtonDown(nFlags, point);
}

 

void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
 if(m_bDraw)
 {
  CClientDC dc(this);
  dc.SetROP2(R2_NOT);     //1
  dc.MoveTo(m_ptOrigin);  //2
  dc.LineTo(m_ptEnd);    //3
  m_ptEnd = point;
  dc.MoveTo(m_ptOrigin);
  dc.LineTo(m_ptEnd);
 }
 CView::OnMouseMove(nFlags, point);
}

具体原理是,m_ptOrigin为起始坐标点,m_ptEnd不断的记录终端坐标点,这里假定客户区是白色的,在鼠标移动时,1句是将绘图的模式设成像素色为屏幕颜色的反色,注意这时的m_ptEnd为上一次的鼠标移动的终点,上次那条线颜色为黑色,通过1、2、3句将上次的那条线的像素色黑色变成白色和客户区颜色相同,后面三句才最终画出在现在这个坐标终点下的黑色直线。不断往复。(其实这个方法虽然很普遍,但是很不实用)

 

时间: 2024-09-19 09:28:30

直线的“橡皮筋”画法的相关文章

初学者,只需要很简单的vb.net实现的功能案例

问题描述 初学者,只需要很简单的vb.net实现的功能案例:在窗体内画直线(橡皮筋效果)画的直线能选择:删除,平移,调整,谢谢. 解决方案 解决方案二:说起来简单,做起来可不一定就简单了.解决方案三:说起来简单,做起来可不一定就简单了.解决方案四:Quote: 引用2楼rayyu1989的回复: 说起来简单,做起来可不一定就简单了.[/quot]没错,说起来简单,做起来可不一定简单了.这是我一直想说的感受.解决方案五:怎么就没大牛帮忙啊,不管是vb的还是C#都可以学习学习啊,有代码小弟定给分,如

mfc-MFC 绘制橡皮筋直线直线闪烁用书按缓存解决

问题描述 MFC 绘制橡皮筋直线直线闪烁用书按缓存解决 MFC 制作绘制橡皮筋直线时候 鼠标移动会导致直线一闪一闪的怎么解决 解决方案 用双缓冲:百度CMemDC类代码,绑定你的DC用这货绘制就不闪了. 解决方案二: http://www.cnblogs.com/watsonlong/archive/2011/04/19/2021486.html

Photoshop抽线以及虚线画法简明教程

教程 超简单好用抽线教程+虚线画法 1.准备好底图,新建抽线空白图层 2.选择1px铅笔并按照如下设置画笔,抽线的密度可以在这里自行调整 3.在抽线图层上按住shift键垂直画一竖线,CTRL+T水平方向拉升,变更图层效果 在抽线图层上按住shift键垂直画一竖线 CTRL+T水平方向拉 变更图层效果 4.举一反三也就应该知道了虚线的画法了吧,主要就是掌握画笔笔尖形状里的间距,一般的有255--300的间距画出来的直线就比较像虚线了.

沙漠之鹰手枪画法的教程

教程 教程比较长,看起来需要耐心!当然画起来更需要耐心. 源文件下载 首先,我们先来了解一下沙漠之鹰的结构吧. 由于沙漠之鹰强大的威力和小巧的造型使其外观和其他常规手枪有着大不同的区别. 沙鹰的枪管口一般都为大口径,下面是个锥型结构. 沙鹰采用步枪撞针原理射击子弹,这使得其撞针大很长. 撞针的特殊就使得其上膛后拉的距离要比常规手枪长.(当然,这也可以缓解沙鹰强大的后坐力) 沙鹰体积要比常规手枪大,在装上弹铗塞满子弹的话有大约2公斤重,没有受过专业训练的人是无法灵活运用它的. 这些是沙鹰的弹铗~~

mfc 橡皮筋技术-MFC中的橡皮筋技术最终出现两个图形

问题描述 MFC中的橡皮筋技术最终出现两个图形 在进行绘制的时候,只有一个图形,但是绘制完后就会出现两个图形,比如点击画线,最后就会出现平分直线的椭圆,点击画矩形,最后就会出现内切于矩形的椭圆,总之椭圆无处不在,跪求大神帮忙哪....

图像处理-C#中在PictureBox上使用橡皮筋画线

问题描述 C#中在PictureBox上使用橡皮筋画线 想法是在原有图层上加上一个透明图层,在那上面画线段.来获取两点位置和线段长度. 在winform项目中添加一个PictureBox控件,然后添加鼠标在PictureBox上的事件.目前遇到了两个问题,1.透明图层的添加,BufferedGraphics bg对象使用bg.Graphics.Clear(Color.Transparent);时背景为黑色,如何设置透明色? 在网上看了许多,是用图像缓存技术来实现的.具体代码如下: using S

橡皮筋算法的原理和实现

橡皮筋算法         程序员,可以选择研究技术,也可以选择赚钱.但是以赚钱的心态去做程序员,会品尝不到技术的很多快乐.   1.橡皮筋算法原理       橡皮筋算法,指的是什么,我们都应该很清楚了.以直线为例,就是直线的一端固定,拉着直线的另一个端点,不断调整直线的位置,直到找到合适的位置后,直线才真正的画出来,前面的线不保留.       按照我们一般的逻辑思维,就是不断的擦除刚画过的线,只保留最后的一根直线.但在计算机绘图中,没有擦除的方法,而是用反色覆盖掉原来的图像.也就是不断的用

急需-画直线的代码在VC 环境下编写

问题描述 画直线的代码在VC 环境下编写 在VC c++环境下编写一个程序,画直线,求代码.希望快点,谢谢了 解决方案 MoveToEx( hdc, xSrc, ySrc, NULL); LineTo( hwd, xDst, yDst); 就是直线

Dreamweaver中加入竖直线的办法

dreamweaver 网页制作时经常用到1个像素高或宽的细线条来修饰,可以使网页的布局更加清晰,整体更加美观.由于一直习惯使用Dreamweaver编辑网页,所以在阅读<巧妙的在Fontpage中给网页加入一条竖直线>一文后,笔者利用文中的方法二,在Dreamweaver中给网页加入一条竖直线. 依葫芦画瓢,按照<巧妙>一文的所述的方法二,笔者在Dreamweaver中插入表格,设置单元格边距和间距均为0,表格的宽度为1个像素,并设置背景色为蓝色.确认设置无误后,按F12预览,可