VB.Net/Application/Painter
Your own paint
<source lang="vbnet"> " Code from Begin VB.net Programming Imports System Imports System.Collections Imports System.Data Imports System.IO Imports System.Xml.Serialization Imports System.Xml Imports System.Windows.Forms Imports System.Data.SqlClient Imports System.Drawing Imports System.ruponentModel
Public Class MainClass
Shared Sub Main() Dim form1 As Form = New Form1 Application.Run(form1) End Sub
End Class
Public Class Form1
Inherits System.Windows.Forms.Form
- Region " Windows Form Designer generated code "
Public Sub New() MyBase.New() "This call is required by the Windows Form Designer. InitializeComponent() "Add any initialization after the InitializeComponent() call End Sub "Form overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub "Required by the Windows Form Designer Private components As System.ruponentModel.IContainer "NOTE: The following procedure is required by the Windows Form Designer "It can be modified using the Windows Form Designer. "Do not modify it using the code editor. Friend WithEvents canvas As PaintCanvas Friend WithEvents paletteColor As ColorPalette Friend WithEvents mnuMain As System.Windows.Forms.MainMenu Friend WithEvents mnuTools As System.Windows.Forms.MenuItem Friend WithEvents mnuToolsCircle As System.Windows.Forms.MenuItem Friend WithEvents mnuToolsHollowCircle As System.Windows.Forms.MenuItem Friend WithEvents dlgOpenBackground As System.Windows.Forms.OpenFileDialog Friend WithEvents mnuFile As System.Windows.Forms.MenuItem Friend WithEvents mnuFileOpenBackground As System.Windows.Forms.MenuItem <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.canvas = New PaintCanvas() Me.paletteColor = New ColorPalette() Me.mnuMain = New System.Windows.Forms.MainMenu() Me.mnuFile = New System.Windows.Forms.MenuItem() Me.mnuFileOpenBackground = New System.Windows.Forms.MenuItem() Me.mnuTools = New System.Windows.Forms.MenuItem() Me.mnuToolsCircle = New System.Windows.Forms.MenuItem() Me.mnuToolsHollowCircle = New System.Windows.Forms.MenuItem() Me.dlgOpenBackground = New System.Windows.Forms.OpenFileDialog() Me.SuspendLayout() " "canvas " Me.canvas.Anchor = (((System.Windows.Forms.AnchorStyles.Top Or System.Windows.Forms.AnchorStyles.Bottom) _ Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right) Me.canvas.BackColor = System.Drawing.Color.White Me.canvas.Location = New System.Drawing.Point(4, -4) Me.canvas.Name = "canvas" Me.canvas.Size = New System.Drawing.Size(684, 356) Me.canvas.TabIndex = 0 " "paletteColor " Me.paletteColor.Anchor = ((System.Windows.Forms.AnchorStyles.Bottom Or System.Windows.Forms.AnchorStyles.Left) _ Or System.Windows.Forms.AnchorStyles.Right) Me.paletteColor.AutoScroll = True Me.paletteColor.Location = New System.Drawing.Point(0, 356) Me.paletteColor.Name = "paletteColor" Me.paletteColor.Size = New System.Drawing.Size(688, 24) Me.paletteColor.TabIndex = 1 " "mnuMain " Me.mnuMain.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.mnuFile, Me.mnuTools}) " "mnuFile " Me.mnuFile.Index = 0 Me.mnuFile.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.mnuFileOpenBackground}) Me.mnuFile.Text = "&File" " "mnuFileOpenBackground " Me.mnuFileOpenBackground.Index = 0 Me.mnuFileOpenBackground.Text = "Open &Background Image" " "mnuTools " Me.mnuTools.Index = 1 Me.mnuTools.MenuItems.AddRange(New System.Windows.Forms.MenuItem() {Me.mnuToolsCircle, Me.mnuToolsHollowCircle}) Me.mnuTools.Text = "&Tools" " "mnuToolsCircle " Me.mnuToolsCircle.Checked = True Me.mnuToolsCircle.Index = 0 Me.mnuToolsCircle.Text = "&Circle" " "mnuToolsHollowCircle " Me.mnuToolsHollowCircle.Index = 1 Me.mnuToolsHollowCircle.Text = "&Hollow Circle" " "Form1 " Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.ClientSize = New System.Drawing.Size(688, 377) Me.Controls.AddRange(New System.Windows.Forms.Control() {Me.paletteColor, Me.canvas}) Me.Menu = Me.mnuMain Me.Name = "Form1" Me.Text = "WroxPaint" Me.ResumeLayout(False) End Sub
- End Region
Private Sub paletteColor_LeftClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles paletteColor.LeftClick canvas.GraphicLeftColor = paletteColor.LeftColor End Sub Private Sub paletteColor_RightClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles paletteColor.RightClick canvas.GraphicRightColor = paletteColor.RightColor End Sub Private Sub mnuToolsCircle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuToolsCircle.Click canvas.GraphicTool = PaintCanvas.GraphicTools.CirclePen UpdateMenu() End Sub Private Sub mnuToolsHollowCircle_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuToolsHollowCircle.Click canvas.GraphicTool = PaintCanvas.GraphicTools.HollowCirclePen UpdateMenu() End Sub Private Function UpdateMenu() If canvas.GraphicTool = PaintCanvas.GraphicTools.CirclePen Then mnuToolsCircle.Checked = True Else mnuToolsCircle.Checked = False End If If canvas.GraphicTool = PaintCanvas.GraphicTools.HollowCirclePen Then mnuToolsHollowCircle.Checked = True Else mnuToolsHollowCircle.Checked = False End If End Function Private Sub mnuFileOpenBackground_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles mnuFileOpenBackground.Click OpenBackgroundImage() End Sub Public Sub OpenBackgroundImage() If dlgOpenBackground.ShowDialog() = DialogResult.OK Then Dim backgroundImage As Image = _ Image.FromFile(dlgOpenBackground.FileName) canvas.BackgroundImage = backgroundImage End If End Sub
End Class
Public Class PaintCanvas
Inherits System.Windows.Forms.UserControl Public Enum GraphicTools As Integer CirclePen = 0 HollowCirclePen = 1 End Enum Public Enum GraphicSizes As Integer Small = 4 Medium = 10 Large = 20 End Enum Public GraphicsItems As New ArrayList() Public GraphicTool As GraphicTools = GraphicTools.CirclePen Public GraphicSize As GraphicSizes = GraphicSizes.Medium Public GraphicLeftColor As Color = Color.Black Public GraphicRightColor As Color = Color.White Private Sub DoMousePaint(ByVal e As MouseEventArgs) Dim newItem As GraphicsItem Dim useColor As Color = GraphicLeftColor If e.Button = MouseButtons.Right Then useColor = GraphicRightColor Select Case GraphicTool Case GraphicTools.CirclePen, GraphicTools.HollowCirclePen Dim filled As Boolean = True If GraphicTool = GraphicTools.HollowCirclePen Then _ filled = False Dim circle As New GraphicsCircle() circle.SetPoint(e.X, e.Y, GraphicSize, useColor, filled) newItem = circle End Select If Not newItem Is Nothing Then GraphicsItems.Add(newItem) Invalidate(newItem.Rectangle) End If End Sub
- Region " Windows Form Designer generated code "
Public Sub New() MyBase.New() "This call is required by the Windows Form Designer. InitializeComponent() "Add any initialization after the InitializeComponent() call End Sub "UserControl overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub "Required by the Windows Form Designer Private components As System.ruponentModel.IContainer "NOTE: The following procedure is required by the Windows Form Designer "It can be modified using the Windows Form Designer. "Do not modify it using the code editor. <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() " "PaintCanvas " Me.BackColor = System.Drawing.Color.WhiteSmoke Me.Name = "PaintCanvas" End Sub
- End Region
Protected Overrides Sub OnMouseDown(ByVal e As System.Windows.Forms.MouseEventArgs) If e.Button = MouseButtons.Left Or e.Button = MouseButtons.Right Then DoMousePaint(e) End If End Sub Protected Overrides Sub OnMouseMove(ByVal e As System.Windows.Forms.MouseEventArgs) If e.Button = MouseButtons.Left Or e.Button = MouseButtons.Right Then DoMousePaint(e) End If End Sub Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) Dim item As GraphicsItem For Each item In GraphicsItems If e.ClipRectangle.IntersectsWith(item.Rectangle) = True Then item.Draw(e.Graphics) End If Next End Sub Protected Overrides Sub OnPaintBackground(ByVal pevent As System.Windows.Forms.PaintEventArgs) Dim backgroundBrush As New SolidBrush(BackColor) pevent.Graphics.FillRectangle(backgroundBrush, pevent.ClipRectangle) If Not BackgroundImage Is Nothing Then Dim clientRectangle As New Rectangle(0, 0, Width, Height) Dim imageWidth As Integer = BackgroundImage.Width Dim imageHeight As Integer = BackgroundImage.Height Dim ratio As Double = _ CType(imageHeight, Double) / CType(imageWidth, Double) If imageWidth > clientRectangle.Width Then imageWidth = clientRectangle.Width imageHeight = CType(CType(imageWidth, Double) * ratio, Integer) Else imageHeight = clientRectangle.Height imageWidth = CType(CType(imageHeight, Double) / ratio, Integer) End If Dim imageLocation As New Point( _ (clientRectangle.Width / 2) - (imageWidth / 2), _ (clientRectangle.Height / 2) - (imageHeight / 2)) Dim imageSize As New Size(imageWidth, imageHeight) Dim imageRectangle As New Rectangle(imageLocation, imageSize) pevent.Graphics.DrawImage(BackgroundImage, imageRectangle) End If End Sub Protected Overrides Sub OnResize(ByVal e As System.EventArgs) Invalidate() End Sub
End Class Public MustInherit Class GraphicsItem
Public Color As Color Public IsFilled As Boolean Public Rectangle As Rectangle Public MustOverride Sub Draw(ByVal graphics As Graphics) Public Sub SetPoint(ByVal x As Integer, ByVal y As Integer, _ ByVal graphicSize As Integer, _ ByVal graphicColor As Color, ByVal graphicIsFilled As Boolean) Rectangle = New _ Rectangle(x - (graphicSize / 2), y - (graphicSize / 2), _ graphicSize, graphicSize) Color = graphicColor IsFilled = graphicIsFilled End Sub
End Class Public Class GraphicsCircle
Inherits GraphicsItem Public Overrides Sub Draw(ByVal graphics As _ System.Drawing.Graphics) If IsFilled = True Then Dim brush As New SolidBrush(Me.Color) graphics.FillEllipse(brush, Me.Rectangle) Else Dim pen As New Pen(Me.Color) Dim drawRectangle As Rectangle = Me.Rectangle drawRectangle.Inflate(-1, -1) graphics.DrawEllipse(pen, drawRectangle) End If End Sub
End Class Public Class ColorPaletteButton
Public Color As Color = Color.Black Public Rectangle As Rectangle Public ButtonAssignment As ButtonAssignments = ButtonAssignments.None Public Enum ButtonAssignments As Integer None = 0 LeftButton = 1 RightButton = 2 End Enum Public Sub New(ByVal newColor As Color) Color = newColor End Sub Public Sub SetPosition(ByVal x As Integer, ByVal y As Integer, _ ByVal buttonSize As Integer) Rectangle = New Rectangle(x, y, buttonSize, buttonSize) End Sub Public Sub Draw(ByVal graphics As Graphics) Dim brush As New SolidBrush(Color) graphics.FillRectangle(brush, Rectangle) Dim pen As New Pen(Color.Black) graphics.DrawRectangle(pen, Rectangle) If ButtonAssignment <> ButtonAssignments.None Then Dim font As New Font("verdana", 8, FontStyle.Bold) Dim buttonText As String = "L" If ButtonAssignment = ButtonAssignments.RightButton Then _ buttonText = "R" Dim fontBrush As SolidBrush If Color.R < 100 Or Color.B < 100 Or Color.G < 100 Then fontBrush = New SolidBrush(Color.White) Else fontBrush = New SolidBrush(Color.Black) End If graphics.DrawString(buttonText, font, fontBrush, _ Rectangle.Left, Rectangle.Top) End If End Sub
End Class Public Class ColorPalette
Inherits System.Windows.Forms.UserControl Public Buttons As New ArrayList() Public ButtonSize As Integer = 15 Public ButtonSpacing As Integer = 5 Public LeftColor As Color = Color.Black Public RightColor As Color = Color.White Private leftButton As ColorPaletteButton Private rightButton As ColorPaletteButton Event LeftClick(ByVal sender As Object, ByVal e As EventArgs) Event RightClick(ByVal sender As Object, ByVal e As EventArgs) Public Function GetButtonAt(ByVal x As Integer, ByVal y As Integer) _ As ColorPaletteButton Dim button As ColorPaletteButton For Each button In Buttons If button.Rectangle.Contains(x, y) = True Then Return button Next End Function Public Function AddColor(ByVal newColor As Color) As _ ColorPaletteButton Dim button As New ColorPaletteButton(newColor) Buttons.Add(button) End Function
- Region " Windows Form Designer generated code "
Public Sub New() MyBase.New() "This call is required by the Windows Form Designer. InitializeComponent() "Add any initialization after the InitializeComponent() call " add the colors... AddColor(Color.Black) AddColor(Color.White) AddColor(Color.Red) AddColor(Color.Blue) AddColor(Color.Green) AddColor(Color.Gray) AddColor(Color.DarkRed) AddColor(Color.DarkBlue) AddColor(Color.DarkGreen) AddColor(Color.DarkGray) AddColor(Color.FromArgb(208, 112, 222)) AddColor(CType(SystemBrushes.ActiveCaption, SolidBrush).Color) End Sub "UserControl overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean) If disposing Then If Not (components Is Nothing) Then components.Dispose() End If End If MyBase.Dispose(disposing) End Sub "Required by the Windows Form Designer Private components As System.ruponentModel.IContainer "NOTE: The following procedure is required by the Windows Form Designer "It can be modified using the Windows Form Designer. "Do not modify it using the code editor. Friend WithEvents dlgColor As System.Windows.Forms.ColorDialog <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Me.dlgColor = New System.Windows.Forms.ColorDialog() " "ColorPalette " Me.Name = "ColorPalette" End Sub
- End Region
Protected Overrides Sub OnResize(ByVal e As System.EventArgs) Dim x As Integer, y As Integer Dim button As ColorPaletteButton For Each button In Buttons button.SetPosition(x, y, ButtonSize) x += (ButtonSize + ButtonSpacing) If x + ButtonSize > Width Then y += (ButtonSize + ButtonSpacing) x = 0 End If Next Invalidate() End Sub Protected Overrides Sub OnPaint(ByVal e As System.Windows.Forms.PaintEventArgs) Dim button As ColorPaletteButton For Each button In Buttons If e.ClipRectangle.IntersectsWith(button.Rectangle) Then button.Draw(e.Graphics) End If Next End Sub Protected Overrides Sub OnMouseUp(ByVal e As System.Windows.Forms.MouseEventArgs) Dim button As ColorPaletteButton = GetButtonAt(e.X, e.Y) If Not button Is Nothing Then If e.Button = MouseButtons.Left Then If Not button Is rightButton Then LeftColor = button.Color If Not leftButton Is Nothing Then leftButton.ButtonAssignment = _ ColorPaletteButton.ButtonAssignments.None Invalidate(leftButton.Rectangle) End If button.ButtonAssignment = _ ColorPaletteButton.ButtonAssignments.LeftButton Invalidate(button.Rectangle) leftButton = button RaiseEvent LeftClick(Me, New EventArgs()) End If End If If e.Button = MouseButtons.Right Then If Not button Is leftButton Then RightColor = button.Color If Not rightButton Is Nothing Then rightButton.ButtonAssignment = _ ColorPaletteButton.ButtonAssignments.None Invalidate(rightButton.Rectangle) End If button.ButtonAssignment = _ ColorPaletteButton.ButtonAssignments.RightButton Invalidate(button.Rectangle) rightButton = button RaiseEvent RightClick(Me, New EventArgs()) End If End If Else If dlgColor.ShowDialog = DialogResult.OK Then AddColor(dlgColor.Color) OnResize(New EventArgs()) End If
End If End Sub
End Class
</source>