MFC電腦圖形學(3)_電腦

來源:互聯網
上載者:User

之前我們已經可以畫出直線和曲線了。但是演算法雖容易理解,但是複雜度高,今天就介紹比較流行的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));

效果如下

打完收工。。。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.