Mega Code Archive

 
Categories / C# / GUI Windows Form
 

MDI and Dock

/* 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; using System.Drawing.Drawing2D; namespace DockingWindows {     /// <summary>     /// Summary description for Form1.     /// </summary>     public class MDIMain : System.Windows.Forms.Form     {         internal System.Windows.Forms.Panel pnlDock;         /// <summary>         /// Required designer variable.         /// </summary>         private System.ComponentModel.Container components = null;         public MDIMain()         {             //             // 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.pnlDock = new System.Windows.Forms.Panel();             this.SuspendLayout();             //              // pnlDock             //              this.pnlDock.Anchor = ((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)                  | System.Windows.Forms.AnchorStyles.Left);             this.pnlDock.BackColor = System.Drawing.SystemColors.AppWorkspace;             this.pnlDock.Name = "pnlDock";             this.pnlDock.Size = new System.Drawing.Size(148, 302);             this.pnlDock.TabIndex = 2;             this.pnlDock.Visible = false;             this.pnlDock.Paint += new System.Windows.Forms.PaintEventHandler(this.pnlDock_Paint);             //              // MDIMain             //              this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);             this.ClientSize = new System.Drawing.Size(534, 304);             this.Controls.AddRange(new System.Windows.Forms.Control[] {                                                                           this.pnlDock});             this.IsMdiContainer = true;             this.Name = "MDIMain";             this.Text = "Form1";             this.Load += new System.EventHandler(this.Form1_Load);             this.ResumeLayout(false);         }         #endregion         /// <summary>         /// The main entry point for the application.         /// </summary>         [STAThread]         static void Main()          {             Application.Run(new MDIMain());         }         private void Form1_Load(object sender, System.EventArgs e)         {             Floater frmFloat = new Floater();             frmFloat.Owner = this;             frmFloat.Show();         }         public bool DrawDockRectangle         {             get             {                 return pnlDock.Visible;             }             set             {                 pnlDock.Visible = value;             }         }         public void AddToDock(Form frm)         {             // Allow the form to be contained in a container control.             frm.TopLevel = false;             pnlDock.Controls.Add(frm);             // Don't let the form be dragged off.             frm.WindowState = FormWindowState.Maximized;         }         private void pnlDock_Paint(object sender, System.Windows.Forms.PaintEventArgs e)         {             HatchBrush dockCueBrush = new HatchBrush(HatchStyle.LightDownwardDiagonal,                  Color.White, Color.Gray);             Pen dockCuePen = new Pen(dockCueBrush, 10);             e.Graphics.DrawRectangle(dockCuePen,                  new Rectangle(0, 0, pnlDock.Width, pnlDock.Height));         }     }     /// <summary>     /// Summary description for Floater.     /// </summary>     public class Floater : System.Windows.Forms.Form     {         internal System.Windows.Forms.PictureBox PictureBox2;         internal System.Windows.Forms.Button Button3;         internal System.Windows.Forms.Button Button2;         internal System.Windows.Forms.Button Button1;         internal System.Windows.Forms.Timer tmrDock;         private System.ComponentModel.IContainer components;         public Floater()         {             //             // 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.components = new System.ComponentModel.Container();             this.PictureBox2 = new System.Windows.Forms.PictureBox();             this.Button3 = new System.Windows.Forms.Button();             this.Button2 = new System.Windows.Forms.Button();             this.Button1 = new System.Windows.Forms.Button();             this.tmrDock = new System.Windows.Forms.Timer(this.components);             this.SuspendLayout();             //              // PictureBox2             //              this.PictureBox2.Anchor = (((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)                  | System.Windows.Forms.AnchorStyles.Left)                  | System.Windows.Forms.AnchorStyles.Right);             this.PictureBox2.Location = new System.Drawing.Point(1, -3);             this.PictureBox2.Name = "PictureBox2";             this.PictureBox2.Size = new System.Drawing.Size(134, 172);             this.PictureBox2.TabIndex = 2;             this.PictureBox2.TabStop = false;                          //              // Button3             //              this.Button3.FlatStyle = System.Windows.Forms.FlatStyle.System;             this.Button3.Location = new System.Drawing.Point(14, 56);             this.Button3.Name = "Button3";             this.Button3.Size = new System.Drawing.Size(108, 20);             this.Button3.TabIndex = 7;             this.Button3.Text = "Controls";             //              // Button2             //              this.Button2.FlatStyle = System.Windows.Forms.FlatStyle.System;             this.Button2.Location = new System.Drawing.Point(14, 36);             this.Button2.Name = "Button2";             this.Button2.Size = new System.Drawing.Size(108, 20);             this.Button2.TabIndex = 6;             this.Button2.Text = "Dockable";             //              // Button1             //              this.Button1.FlatStyle = System.Windows.Forms.FlatStyle.System;             this.Button1.Location = new System.Drawing.Point(14, 16);             this.Button1.Name = "Button1";             this.Button1.Size = new System.Drawing.Size(108, 20);             this.Button1.TabIndex = 5;             this.Button1.Text = "Sample";             //              // tmrDock             //              this.tmrDock.Interval = 10;             this.tmrDock.Tick += new System.EventHandler(this.tmrDock_Tick);             //              // Floater             //              this.AutoScaleBaseSize = new System.Drawing.Size(5, 14);             this.ClientSize = new System.Drawing.Size(136, 166);             this.Controls.AddRange(new System.Windows.Forms.Control[] {                                                                           this.Button3,                                                                           this.Button2,                                                                           this.Button1,                                                                           this.PictureBox2});             this.Font = new System.Drawing.Font("Tahoma", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0)));             this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;             this.Name = "Floater";             this.Text = "Floater";             this.Move += new System.EventHandler(this.Floater_Move);             this.ResumeLayout(false);         }         #endregion         private Point dockTestAt;         private void Floater_Move(object sender, System.EventArgs e)         {             // Determine the current location in parent form coordinates.             Point mouseAt = this.Owner.PointToClient(this.Location);             // Determine if the floated is close enough to dock.             if (mouseAt.X < 5 && mouseAt.X > -5)             {                 if ((Control.MouseButtons & MouseButtons.Left) == MouseButtons.Left)                 {                     dockTestAt = mouseAt;                     // Show the dock focus rectangle.                     ((MDIMain)this.Owner).DrawDockRectangle = true;                     // Reset the timer to poll for the MouseUp event.                     tmrDock.Enabled = false;                     tmrDock.Enabled = true;                 }             }         }         private void tmrDock_Tick(object sender, System.EventArgs e)         {             if (dockTestAt.X == this.Owner.PointToClient(this.Location).X                  && dockTestAt.Y == this.Owner.PointToClient(this.Location).Y)             {                 if (Control.MouseButtons == MouseButtons.None)                 {                     // Dock in place.                     tmrDock.Enabled = false;                     ((MDIMain)this.Owner).AddToDock(this);                 }             }             else             {                 // Mouse has moved. Disable this dock attempt.                 tmrDock.Enabled = false;                 ((MDIMain)this.Owner).DrawDockRectangle = false;             }         }     } }