這是用C#/Winform/GDI+實現(xiàn)的類似mspaint的畫圖程序。目前實現(xiàn)了直線、折線、矩形、橢圓、指示箭頭等規(guī)則形狀,這些形狀被繪制后,不會像mspaint那樣,就動不了了,而是可以再次被編輯,包括旋轉(zhuǎn)、縮放等。
對于沒做過這方面程序的人,最好奇的可能就是,你用Graphics類畫出一個東西后,怎么樣才能重新選中、移動、編輯它?
以畫一個矩形為例來說明,你如果用Graphics類在一個控件(Control)上畫了個矩形,并且把矩形的起點坐標(biāo)、大小等數(shù)據(jù)記住,那么用戶在控件上單擊的時候,你就能判斷出用戶是否在矩形上單擊了,如果是,就表示矩形被選中了,如果用戶同時還移動了鼠標(biāo),那么就可以根據(jù)移動的距離重新計算矩形的起點坐標(biāo),然后重新畫這個矩形。
這就是愛搜呀畫圖板用的基本方法。在內(nèi)部記住各種形狀(線段、矩形、橢圓等)的起點坐標(biāo)、大小、顏色等等信息,在用戶移動、旋轉(zhuǎn)形狀后,要隨即更新這些信息,并重新繪制形狀。
其它的難點還有不少,比如用戶將圖像放大,并在放大的視圖上繪制新的形狀,這時候的處理跟未放大時有什么不同?再如撤銷(后退一步)功能,怎么樣放棄最后一次操作,返回之前的狀態(tài)?放大和撤銷這兩個功能現(xiàn)在還為實現(xiàn),但是大致思路已經(jīng)有了。
做這個程序有兩個目的,一是把功能寫全后,用我之前寫的一個控件庫來做其UI,然后這個畫圖程序作為控件庫的應(yīng)用例子。二是做一個實用的截圖、畫圖程序,盡量仿mspaint來做,但要在個方面有所增強(qiáng)。當(dāng)然了目前愛搜呀畫圖板還很簡單,沒有截圖功能、不能粘貼位圖、不能編輯文字等等,后面會繼續(xù)完善。