运行环境是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)
{
p = GetDC();
int x, y, dx, dy, e;
dy = y1 - y0;
x = x0;
y = y0;
{
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 (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;
那么恭喜现在就可以运行了!!