繪圖是系統(tǒng)內部操作的,不需要懂原理
專業(yè)領域包括成都網站制作、網站建設、外貿網站建設、成都商城網站開發(fā)、微信營銷、系統(tǒng)平臺開發(fā), 與其他網站設計及系統(tǒng)開發(fā)公司不同,創(chuàng)新互聯(lián)公司的整合解決方案結合了幫做網絡品牌建設經驗和互聯(lián)網整合營銷的理念,并將策略和執(zhí)行緊密結合,為客戶提供全網互聯(lián)網整合方案。
方法就在那里,只有會用和不會用,你的代碼告訴它繪制,它就會繪制。它(方法)究竟如何去繪制的并不是重點,反正它會繪制。
drawline(繪線)方法很簡單,第一個參數是pen,它確定線條的顏色、寬度和樣式。第二、第三個參數都是point類型,確定兩個點的位置,繪制直線。
不想整個重畫,最好用單色的背景,例如黑色,線條是白色的
用變量把線條的內容備份
當想改變線條的位置或者長度之前,先用存下來的變量以黑色重畫一次,覆蓋原來的白色線條
然后再畫新的白色線條,這種重畫方法比較節(jié)省資源
假如需要用花哨的背景或者圖片當背景,也可以用局部重回的方式。
代碼就不提供了,只提供思路。
可以把所有畫的線都保存在一個列表中,畫的時候全部畫出即可。如下:
Public?Class?Form1
Class?Line? ? ? '直線類
? Public?Point1,?Point2?As?Point? ? ?'成員,直線的兩個端點
? Sub?New(p1?As?Point,?p2?As?Point)? ?'構造方法
? ? ? Point1?=?p1
? ? ? Point2?=?p2
? End?Sub
? Public?Sub?Draw(g?As?Graphics)? ? ? '繪制方法
? ? ? g.DrawLine(Pens.Black,?Point1,?Point2)
? End?Sub
End?Class
Private?Lines?As?New?List(Of?Line)? ? ? '列表用于保存所有畫下的直線
Private?Sub?Form1_Load(sender?As?Object,?e?As?EventArgs)?Handles?MyBase.Load
? BackColor?=?Color.White
? DoubleBuffered?=?True? ? ? ?'開啟雙緩沖可有效避免閃爍
End?Sub
Private?Sub?Form1_MouseDown(sender?As?Object,?e?As?MouseEventArgs)?Handles?Me.MouseDown
? Lines.Add(New?Line(e.Location,?e.Location))? ? ?'在直線列表中添加直線
End?Sub
Private?Sub?Form1_MouseMove(sender?As?Object,?e?As?MouseEventArgs)?Handles?Me.MouseMove
? If?e.Button??Windows.Forms.MouseButtons.Left?Then?Return?'左鍵未按下
? '鼠標拖動時改變列表最后一條直線(也即當前直線的第二個端點)
? Lines(Lines.Count?-?1).Point2?=?e.Location
? Refresh()? ? ? ?'刷新窗體
End?Sub
'在Form的Paint事件中繪制所有直線,每次Form1重繪時都會觸發(fā)Paint事件
'PS:?也可以通過重寫OnPaint方法來達到類似的效果
Private?Sub?Form1_Paint(sender?As?Object,?e?As?PaintEventArgs)?Handles?Me.Paint
? e.Graphics.SmoothingMode?=?Drawing2D.SmoothingMode.AntiAlias? ? '開啟抗鋸齒
? For?Each?l?In?Lines? ? ?'遍歷所有直線
? ? ? l.Draw(e.Graphics)? '調用繪制方法,傳入的參數可以理解為畫布
? Next
End?Sub
End?Class
運行效果:
代碼寫起來可能比較麻煩,給你個思路,就是用GraphicsPath來繪制,然后通過繪制目標的鼠標移動事件來獲取當前鼠標在繪制目標中的實際位置,再通過GraphicsPath的IsVisible()方法來確認鼠標是否包含在GraphicsPath中。
DrawLine直線比較容易處理,只要得到Line的坐標點,然后比較當前鼠標坐標就好。