運行環境是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;
那麼恭喜現在就可以運行了!!