之前我們已經可以畫出直線和曲線了。但是演算法雖容易理解,但是複雜度高,今天就介紹比較流行的DDA畫線法,還有,對滑鼠進行事件有所響應,即,在畫板上,滑鼠左鍵單擊,移動至另外一個地方鬆開,此時在這兩個點之間畫一條線。 DDA畫線
演算法代碼
void DDA_Line(int x1, int y1, int x2, int y2, int color){ CDC *pDC = GetDC();//擷取裝置環境 int k,i; float x, y, dx, dy; k = abs(x2-x1); if (abs(y2-y1)>k) { k = abs(y2-y1); } dx = float(x2-x1)/k; dy = float(y2-y1)/k; x=x1; y=y1; for (i=0;i<k;i++) { pDC->SetPixel(x, y, color); x = x+dx; y = y+dy; } }
網上好多人畫圖解釋說明,這裡我就不說了。
下面就是處理滑鼠事件 滑鼠事件
我們先添加四個成員變數x1,y1,x2,y2表示線段端點座標
添加完如下圖
在功能表列
view(視圖) –> 滑鼠事件 – >右邊Class name 選擇CXXXView(註:XXX為你的項目名)–>在Messages:找到WM_LBUTTONDOWN 雙擊或者先單擊,再在右邊選擇Add Function
最後點擊Edit Code
如圖
這是按一下滑鼠響應事件函數,我們編輯代碼:
void OnLButtonDown(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CView::OnLButtonDown(nFlags, point); x1 = point.x; y1 = point.y;}
按照上面的方法步驟,繼續添加滑鼠左鍵鬆開的響應事件。
同時即可畫出線段。
void OnLButtonUp(UINT nFlags, CPoint point) { // TODO: Add your message handler code here and/or call default CView::OnLButtonUp(nFlags, point); x2 = point.x; y2 = point.y; DDA_Line(x1,y1,x2,y2,RGB(255,0,0));}
效果如下:
下面,我們以所畫的線段為對角線,畫一個矩形。
這個也很簡單,自己畫個圖,就可以寫出代碼
DDA_Line(x1,y1,x2,y1,RGB(0,255,0));DDA_Line(x1,y1,x1,y2,RGB(0,255,0));DDA_Line(x1,y2,x2,y2,RGB(0,255,0));DDA_Line(x2,y1,x2,y2,RGB(0,255,0));
效果如下
打完收工。。。