运行环境是vs2017 本人亲自尝试过vc6也是完全可以的所有的步骤,方法都是一样。
原创:金松(Inner Mongolia University)
原理:调用的
LButouneDown() 决定起始点
LButounUp() 决定终点位置
MouseMove() 实现动态画线核心函数
OnDraw() 刷新界面根源函数,
Invalidate() 强制调用OnDraw()函数
动态画线-->当我们按下鼠标左键不放,当左键弹起的整个过程中直线的位置会不断地改变,因为中点还没有定下来呢,
制作步骤:
(1)打开vs2017/vc2010/vc6/vc2013 ,创建mfc项目,在点击下一步的同时手动选择标准MFC ,点击完成创建项目。
(2)在cxxxxview.h 和cxxxxview.cpp 中创建自己的函数名与具体实现的函数代码。具体如下,
cxxxxview.h下
void MidPointCircle(int x0, int y0, int radus, int color);
cxxxxview.cpp 下
void CMFC1View::Bresenhamline(int x0, int y0, int x1, int y1, int color) { CDC *p; p = GetDC(); int x, y, dx, dy, e; dx = x1 - x0; dy = y1 - y0; e = -dx; x = x0; y = y0; if ((dx >= 0 && dy >= 0) || (dx <= 0 && dy <= 0)) //如果k大于0 { if ((dx<0) || (dx == 0 && dy<0)) //dx小于0说明终点x { dx = -dx;// x = x1;// dy = -dy; y = y1; } if (dy<dx) //第一种情况,k-(0,1)// { e = -dx; for (int i = 0;i<dx;i++) { p->SetPixel(x, y, color); x++; e = e + dy + dy; if (e >= 0) { y++; e = e - dx - dx; } } } else //第二种情况,k-(1,max) { e = -dy; for (int i = 0;i<dy;i++) { p->SetPixel(x, y, color); y++; e = e + dx + dx; if (e >= 0) { x++; e = e - dy - dy; } } } } else //如果k小于0 { int tempx, tempy; //保存x和y的绝对值 if (dx<0) //dx小于0说明终点x { tempx = -dx; tempy = dy; } if (dy<0) { tempx = dx; tempy = -dy; } if (tempx>tempy) //第三种情况,k-(-1,0) { if (dx<0) //dx小于0说明终点x { dx = -dx; x = x1; dy = -dy; y = y1; } e = -dx; for (int i = 0;i<dx;i++) { p->SetPixel(x, y, color); x++; e = e - dy - dy; if (e >= 0) { y--; e = e - dx - dx; } } } else //第四种情况,k-(-1,min) { if (dy<0)//dx小于0说明终点x { dx = -dx; x = x1; dy = -dy; y = y1; } e = -dy; for (int i = 0;i<dy;i++) { p->SetPixel(x, y, color); y++; e = e - dx - dx; if (e >= 0) { x--; e = e - dy - dy; } } } } }(3)给cxxxxview类添加 LButoundown() ,LButounUp() ,函数
(4)给出各个函数的代码 补充的是在cxxxxview.h中要添加cpoint 类型的x1,x2,x3;
那么恭喜现在就可以运行了!!