Mega Code Archive

 
Categories / C# / 2D Graphics
 

Drawing Squares

/* User Interfaces in C#: Windows Forms and Custom Controls by Matthew MacDonald Publisher: Apress ISBN: 1590590457 */ using System; using System.Drawing; using System.Collections; using System.ComponentModel; using System.Windows.Forms; using System.Data; namespace DrawingSquares {     /// <summary>     /// Summary description for DrawingSquares.     /// </summary>     public class DrawingSquares : System.Windows.Forms.Form     {         internal System.Windows.Forms.ContextMenu mnuForm;         internal System.Windows.Forms.MenuItem mnuNewSquare;         internal System.Windows.Forms.ContextMenu mnuLabel;         internal System.Windows.Forms.MenuItem mnuColorChange;         /// <summary>         /// Required designer variable.         /// </summary>         private System.ComponentModel.Container components = null;         public DrawingSquares()         {             //             // Required for Windows Form Designer support             //             InitializeComponent();             //             // TODO: Add any constructor code after InitializeComponent call             //         }         /// <summary>         /// Clean up any resources being used.         /// </summary>         protected override void Dispose( bool disposing )         {             if( disposing )             {                 if (components != null)                  {                     components.Dispose();                 }             }             base.Dispose( disposing );         }         #region Windows Form Designer generated code         /// <summary>         /// Required method for Designer support - do not modify         /// the contents of this method with the code editor.         /// </summary>         private void InitializeComponent()         {             this.mnuForm = new System.Windows.Forms.ContextMenu();             this.mnuNewSquare = new System.Windows.Forms.MenuItem();             this.mnuLabel = new System.Windows.Forms.ContextMenu();             this.mnuColorChange = new System.Windows.Forms.MenuItem();             //              // mnuForm             //              this.mnuForm.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {                                                                                     this.mnuNewSquare});             //              // mnuNewSquare             //              this.mnuNewSquare.Index = 0;             this.mnuNewSquare.Text = "Create New Square";             this.mnuNewSquare.Click += new System.EventHandler(this.mnuNewSquare_Click);             //              // mnuLabel             //              this.mnuLabel.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {                                                                                      this.mnuColorChange});             //              // mnuColorChange             //              this.mnuColorChange.Index = 0;             this.mnuColorChange.Text = "Change Color";             this.mnuColorChange.Click += new System.EventHandler(this.mnuColorChange_Click);             //              // DrawingSquares             //              this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);             this.ClientSize = new System.Drawing.Size(628, 426);             this.ContextMenu = this.mnuForm;             this.Name = "DrawingSquares";             this.Text = "DrawingSquares";             this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.DrawingSquares_MouseDown);         }         #endregion         /// <summary>         /// The main entry point for the application.         /// </summary>         [STAThread]         static void Main()          {             Application.Run(new DrawingSquares());         }         private void mnuNewSquare_Click(object sender, System.EventArgs e)         {             // Create and configure the "square".             Label newLabel = new Label();             newLabel.Size = new Size(40, 40);             newLabel.BorderStyle = BorderStyle.FixedSingle;             // To determine where to place the label, you need to convert the              // current screen-based mouse coordinates into relative form coordinates.             newLabel.Location = this.PointToClient(Control.MousePosition);             // Attach a context menu to the label.             newLabel.ContextMenu = mnuLabel;             // Connect the label to all its event handlers.             newLabel.MouseDown += new MouseEventHandler(lbl_MouseDown);             newLabel.MouseMove += new MouseEventHandler(lbl_MouseMove);             newLabel.MouseUp += new MouseEventHandler(lbl_MouseUp);             // Add the label to the form.             this.Controls.Add(newLabel);         }         // Keep track of when fake drag or resize mode is enabled.         private bool isDragging = false;         private bool isResizing = false;         // Store the location where the user clicked on the control.         private int clickOffsetX, clickOffsetY;         private void lbl_MouseDown(object sender,             System.Windows.Forms.MouseEventArgs e)         {             // Retrieve a reference to the active label.             Control currentCtrl;             currentCtrl = (Control)sender;             if (e.Button == MouseButtons.Right)             {                 // Show the context menu.                 currentCtrl.ContextMenu.Show(currentCtrl, new Point(e.X, e.Y));             }             else if (e.Button == MouseButtons.Left)             {                 clickOffsetX = e.X;                 clickOffsetY = e.Y;                 if ((e.X + 5) > currentCtrl.Width && (e.Y + 5) > currentCtrl.Height)                 {                     // The mouse pointer is in the bottom right corner,                     // so resizing mode is appropriate.                     isResizing = true;                 }                 else                 {                     // The mouse is somewhere else, so dragging mode is                     // appropriate.                     isDragging = true;                 }             }         }         private void lbl_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)         {             // Retrieve a reference to the active label.             Control currentCtrl;             currentCtrl = (Control)sender;             if (isDragging)             {                 // Move the control.                 currentCtrl.Left += e.X - clickOffsetX;                 currentCtrl.Top += e.Y  - clickOffsetY;             }             else if (isResizing)             {                 // Resize the control.                 currentCtrl.Width = e.X;                 currentCtrl.Height = e.Y;             }             else             {                 // Change the pointer if the mouse is in the bottom corner.                 if ((e.X + 5) > currentCtrl.Width && (e.Y + 5) > currentCtrl.Height)                 {                     currentCtrl.Cursor = Cursors.SizeNWSE;                 }                 else                 {                     currentCtrl.Cursor = Cursors.Arrow;                 }             }         }         private void lbl_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)         {             isDragging = false;             isResizing = false;         }         private void mnuColorChange_Click(object sender, System.EventArgs e)         {             // Show color dialog.             ColorDialog dlgColor = new ColorDialog();             dlgColor.ShowDialog();             // Change label background.             mnuLabel.SourceControl.BackColor = dlgColor.Color;         }         private void DrawingSquares_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)         {             if (e.Button == MouseButtons.Right)             {                 this.ContextMenu.Show(this, new Point(e.X, e.Y));             }                  }     } }