请教如何画出一个矩形选择框
请教如何画出一个矩形选择框:
1.像WINXP 桌面空白区域那种。
2.如何让矩形区域覆盖半透明颜色。
下面是拷贝原来有人提问的类似问题,给出的代码,但是我拷贝在CLASS里无效果。
Private rectList As New List(Of Rectangle)
Private pt As Point
Private bmpOld As Bitmap
Private Sub Form1_MouseDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseDown
pt.X = e.X
pt.Y = e.Y
End Sub
Private Sub Form1_MouseMove(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseMove
If e.Button = Windows.Forms.MouseButtons.Left Then
Dim g As Graphics = Graphics.FromImage(Me.BackgroundImage)
'擦除之前绘制的内容
Dim brush As New SolidBrush(Me.BackColor)
g.FillRectangle(brush, Me.ClientRectangle)
brush.Dispose()
'绘制之前的,包括当前的内容
Dim x, y, w, h As Integer
x = Math.Min(pt.X, e.X)
y = Math.Min(pt.Y, e.Y)
w = Math.Abs(pt.X - e.X)
h = Math.Abs(pt.Y - e.Y)
For i As Integer = 0 To rectList.Count - 1
g.DrawRectangle(Pens.Blue, rectList(i))
Next
g.DrawRectangle(Pens.Blue, x, y, w, h)
g.Dispose()
g = Me.CreateGraphics()
g.DrawImage(Me.BackgroundImage, 0, 0)
g.Dispose()
End If
End Sub
Private Sub Form1_MouseUp(ByVal sender As System.Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles MyBase.MouseUp
Dim x, y, w, h As Integer
x = Math.Min(pt.X, e.X)
y = Math.Min(pt.Y, e.Y)
w = Math.Abs(pt.X - e.X)
h = Math.Abs(pt.Y - e.Y)
rectList.Add(New Rectangle(x, y, w, h))
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.BackgroundImage = New Bitmap(Width, Height)
End Sub
Private Sub Form1_ResizeEnd(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.ResizeEnd
If bmpOld Is Nothing Then Return
Me.BackgroundImage = New Bitmap(Width, Height)
Dim g As Graphics = Graphics.FromImage(Me.BackgroundImage)
g.DrawImage(bmpOld, 0, 0)
g.Dispose()
bmpOld.Dispose()
bmpOld = Nothing
End Sub
Private Sub Form1_ResizeBegin(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.ResizeBegin
If BackgroundImage Is Nothing Then Return
bmpOld = Me.BackgroundImage
End Sub
Private Sub Form1_Resize(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Resize
Me.BackgroundImage = Nothing
End Sub
Private Sub Form1_Paint(ByVal sender As System.Object, ByVal e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
If bmpOld Is Nothing Then Return
e.Graphics.DrawImage(bmpOld, 0, 0)
End Sub
第一次接触VB,请指教!