Dim b As New Bitmap(PictureBox1.Width, PictureBox1.Height)
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來自于我們對(duì)這個(gè)行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡(jiǎn)單的方式提供給客戶,將通過不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、網(wǎng)站空間、營(yíng)銷軟件、網(wǎng)站建設(shè)、海興網(wǎng)站維護(hù)、網(wǎng)站推廣。
Dim g As Graphics = Graphics.FromImage(b)
g.Clear(Color.White)
Dim p As New Pen(Color.Black)
p.EndCap = Drawing2D.LineCap.ArrowAnchor
g.DrawLine(p, 30, PictureBox1.Height - 30, 30, 30)
g.DrawLine(p, 30, PictureBox1.Height - 30, PictureBox1.Width - 30, PictureBox1.Height - 30)
Dim i As Integer
Dim bs As New SolidBrush(Color.Green)
Dim po As New Point
po.X = 0
po.Y = PictureBox1.Height - 35
For i = 700 To 1000 Step 50
g.DrawString(i, Me.Font, bs, po.X, po.Y)
g.DrawLine(p, po.X + 28, po.Y + 5, po.X + 30, po.Y + 5)
po.Y -= (PictureBox1.Height - 100) / 6
Next
po.X = 30
po.Y = PictureBox1.Height - 30
For i = 0 To 40 Step 5
g.DrawString(i, Me.Font, bs, po.X, po.Y + 5)
g.DrawLine(p, po.X, po.Y + 2, po.X, po.Y)
po.X += (PictureBox1.Width - 100) / 8
Next
PictureBox1.Image = b
新建一個(gè)Winform,在和Form1平行的位置粘貼如下代碼
Public?Class?MyLabel
Inherits?Label
Protected?Overrides?Sub?OnPaint(e?As?PaintEventArgs)
e.Graphics.DrawEllipse(New?Pen(Color.Red),?New?Rectangle(2,?2,?10,?10))
MyBase.OnPaint(e)
End?Sub
End?Class
運(yùn)行,停掉,在工具箱找到MyLabel,拖動(dòng)就可以看到效果。這只是最基本的重寫,要模仿QQ還需要其他技術(shù)以及美工。
繪制和數(shù)據(jù)分離,就是說,Paint 事件永遠(yuǎn)是用來繪制的,具體繪制什么東西(也就是繪制的數(shù)據(jù),如半徑為4的圓),有數(shù)據(jù)決定,MouseClick 可以更改一些參數(shù),然后由Paint 繪制:
MouseClick 事件里,重繪窗體,即:
int r = 0, x = 0, y = 0;
private void Form1_MouseClick(object sender, MouseEventArgs e)
{
r = 10;
x = e.X;
y = e.Y;
this.Invalidate();
}
private void Form1_Paint(object sender, PaintEventArgs e)
{
// 繪制一個(gè)r半徑圓
e.Graphics.DrawEllipse(new Pen(Color.Red), x, y, r, r);
}
補(bǔ)充:
在 MouseClick 事件中去調(diào)用Form 的 Paint 事件,那么參數(shù)要如何傳遞?
參數(shù)是個(gè)全局變量,類似上面的r、x、y等,不是由e傳過去的,
上述代碼是c#的,vb.net和c#一樣,都是用的fcl類庫(kù),你改一下就可以了,
數(shù)學(xué)上不是有斜二測(cè)畫法,算好坐標(biāo)即可畫出
或者用AnyCAD的.Net圖形控件
也可以調(diào)用matlab 實(shí)現(xiàn)
picture本身不是文本控件,文本是“畫”上去的,換行需要用代碼測(cè)量每個(gè)字在指定字體下的寬度,判斷在當(dāng)前picture的寬度之下,一行能容納多少文字,剩下的文字就在下一行繪制。
VB.net與VB不同。
VB.net已經(jīng)有專門繪圖的類。
可以定義筆刷然后用Drawing類中的方法繪制。
Private Sub DrawEllipse()
Dim myPen As New System.Drawing.Pen(System.Drawing.Color.Red)
Dim formGraphics as System.Drawing.Graphics
formGraphics = Me.CreateGraphics()
formGraphics.DrawEllipse(myPen, New Rectangle(0,0,200,300))
myPen.Dispose()
formGraphics.Dispose()
End Sub
Private Sub DrawRectangle()
Dim myPen As New System.Drawing.Pen(System.Drawing.Color.Red)
Dim formGraphics as System.Drawing.Graphics
formGraphics = Me.CreateGraphics()
formGraphics.DrawRectangle(myPen, New Rectangle(0,0,200,300))
myPen.Dispose()
formGraphics.Dispose()
End Sub