GUI Windows Form C#

/*
GDI+ Programming in C# and VB .NET
by Nick Symmonds
Publisher: Apress
ISBN: 159059035X
*/
using System.Drawing.Printing;
using System.Runtime.InteropServices;
using System;
using System.Drawing;
using System.Drawing.Drawing2D;
using System.Drawing.Imaging;
using System.Drawing.Text;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms;
using System.Data;
namespace Clipper_c {
    /// 
    /// Copyright Nicholas Symmonds 2002
    /// This software is for instructional purposes only.
    /// It may not be sold as is.
    /// 

    public class Clipper : System.Windows.Forms.Form {
        Bitmap bmp;
        NotifyIcon trayIcon       = new  NotifyIcon();
        ContextMenu trayIconMenu  = new ContextMenu();
        private System.Windows.Forms.Button cmdCatch;
        private System.Windows.Forms.Button cmdQuit;
        
        /// 
        /// Required designer variable.
        /// 

        private System.ComponentModel.Container components = null;
        public Clipper() {
            InitializeComponent();
            this.Icon = new Icon("icon.ico");
            this.BackColor          = Color.BlanchedAlmond;
            this.TransparencyKey    = this.BackColor;
            this.cmdCatch.BackColor = Color.Tomato;
            this.cmdQuit.BackColor  = Color.Tomato;
            trayIconMenu.MenuItems.Add("Catch", 
                                  new EventHandler(this.cmdCatch_Click));
            trayIconMenu.MenuItems.Add("Always On Top", 
                                  new EventHandler(this.ClipperOnTop));
            trayIconMenu.MenuItems.Add("Show",  
                                  new EventHandler(this.Show_Main));
            trayIconMenu.MenuItems.Add("Quit",  
                                  new EventHandler(this.cmdQuit_Click));
            trayIcon.Icon = new Icon("icon.ico");
            trayIcon.Text = "Clipper - Screen Capture";
            trayIcon.ContextMenu = trayIconMenu;
            trayIcon.Visible = true;
      
            this.ShowInTaskbar = false;
        }
        
        protected override void Dispose( bool disposing ) {
            if( disposing ) {
                if (components != null) {
                    components.Dispose();
                }
                if (bmp != null)
                    bmp.Dispose();
                trayIcon.Dispose();
            }
            base.Dispose( disposing );
        }
        #region Windows Form Designer generated code
        /// 
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// 

        private void InitializeComponent() {
            this.cmdCatch = new System.Windows.Forms.Button();
            this.cmdQuit = new System.Windows.Forms.Button();
            this.SuspendLayout();
            
            // 
            // cmdCatch
            // 
            this.cmdCatch.ImageAlign = System.Drawing.ContentAlignment.MiddleLeft;
            this.cmdCatch.Location = new System.Drawing.Point(16, 24);
            this.cmdCatch.Name = "cmdCatch";
            this.cmdCatch.Size = new System.Drawing.Size(88, 32);
            this.cmdCatch.TabIndex = 0;
            this.cmdCatch.Text = "&Capture";
            this.cmdCatch.Click += new System.EventHandler(this.cmdCatch_Click);
            
            // 
            // cmdQuit
            // 
            this.cmdQuit.Location = new System.Drawing.Point(144, 24);
            this.cmdQuit.Name = "cmdQuit";
            this.cmdQuit.Size = new System.Drawing.Size(64, 32);
            this.cmdQuit.TabIndex = 1;
            this.cmdQuit.Text = "&Quit";
            this.cmdQuit.Click += new System.EventHandler(this.cmdQuit_Click);
            // 
            // Form1
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(224, 75);
            this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                  this.cmdQuit,
                                                                  this.cmdCatch});
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
            this.MaximizeBox = false;
            this.Name = "Form1";
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.Text = "Screen Capture";
            this.Load += new System.EventHandler(this.Form1_Load);
            this.ResumeLayout(false);
        }
        #endregion
        [STAThread]
        static void Main() {
            Application.Run(new Clipper());
        }
        private void Form1_Load(object sender, System.EventArgs e) {
        }
        protected override void OnResize(EventArgs e) {
            base.OnResize(e);
               if (this.WindowState == FormWindowState.Minimized)
                   this.Opacity = 0;
               else
                   this.Opacity = 1;
        }
        /// 
        /// The desktop capture method makes this form invisible before 
        /// showing the picture. Once the Save form has run this form becomes
        /// visible. Making this form invisible is done via the forms opacity.
        /// 

        private void cmdCatch_Click(object sender, System.EventArgs e) {
            bmp = DeskTop.Capture();
      
            //Make the form invisible
            this.Opacity = 0;
            dtBitmap bmpShow = new dtBitmap(bmp);
            bmp = bmpShow.GetBitmap;
            if (bmp != null) {
                frmSave frm = new frmSave(bmp);
                frm.ShowDialog();
            }
            this.Opacity = 1;
        }
        private void cmdQuit_Click(object sender, System.EventArgs e) {
            trayIcon.Visible = false;
            this.Close();
        }
        private void Show_Main(object sender, System.EventArgs e) {
            this.Visible = true;
            this.WindowState = FormWindowState.Normal;
        }
        private void ClipperOnTop(object sender, System.EventArgs e) {
            if ( trayIconMenu.MenuItems[1].Checked ) {
                trayIconMenu.MenuItems[1].Checked = false;
                this.TopMost = false;
            } else {
                trayIconMenu.MenuItems[1].Checked = true;
                this.TopMost = true;
            }
        }
    }
    /// 
    /// Copyright Nicholas Symmonds 2002
    /// This software is for instructional purposes only.
    /// It may not be sold as is.
    /// 
    /// Allow the user to select a frame for the image before saving it.
    /// 

    public class frmSave : System.Windows.Forms.Form {
        private PictureBox          m_Pic;
        private Bitmap              m_bmp;
        private Bitmap              m_OriginalBmp;
        private PrintPreviewDialog  Pv;
        private PageSetupDialog     Ps;
        private PrintDocument       Pd;
        private PrintDialog         Pr;
        private Font                FooterFont = new Font("Arial", 8);
        private int                 PrintCount = 0;
        private System.Windows.Forms.Panel P1;
        private System.Windows.Forms.MainMenu mainMenu1;
        private System.Windows.Forms.MenuItem mnuFile;
        private System.Windows.Forms.MenuItem mnuSave;
        private System.Windows.Forms.MenuItem mnuPrint;
        private System.Windows.Forms.MenuItem mnuClose;
        private System.Windows.Forms.MenuItem mnuPrintPreview;
        private System.Windows.Forms.MenuItem mnuPrintNow;
        private System.Windows.Forms.MenuItem NoMenu;
        private System.Windows.Forms.MenuItem mnuAttr;
        private System.Windows.Forms.MenuItem mnuBorder;
        private System.ComponentModel.Container components = null;
        public frmSave(Bitmap bmp) {
            InitializeComponent();
            m_bmp = (Bitmap)bmp.Clone();
            m_OriginalBmp = (Bitmap)bmp.Clone();
            P1.BackgroundImage = GetPanelImage();
            P1.Dock = DockStyle.Fill;
      
            m_Pic = new PictureBox();
            m_Pic.BorderStyle = BorderStyle.None;
            m_Pic.SizeMode = PictureBoxSizeMode.AutoSize;
            m_Pic.Image = m_bmp;
            P1.Controls.Add(m_Pic);
            P1.Controls[0].Location = new Point(1, 1);
            //Set up the prnting 
            Pv = new PrintPreviewDialog();
            Ps = new PageSetupDialog();
            Pr = new PrintDialog();
            Pd = new PrintDocument();
            Pd.DocumentName = "ScreenShot";
            Pv.Document = Pd;
            Ps.Document = Pd;
            Pr.Document = Pd;
            Pd.BeginPrint += new PrintEventHandler(this.pd_BeginPrint);
            Pd.PrintPage += new PrintPageEventHandler(this.pd_Print);
        }
        protected override void Dispose( bool disposing ) {
            if( disposing ) {
                if(components != null) {
                    components.Dispose();
                }
                P1.Dispose();
            }
            base.Dispose( disposing );
        }
        #region Windows Form Designer generated code
        /// 
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// 

        private void InitializeComponent() {
            this.P1 = new System.Windows.Forms.Panel();
            this.mainMenu1 = new System.Windows.Forms.MainMenu();
            this.mnuFile = new System.Windows.Forms.MenuItem();
            this.mnuSave = new System.Windows.Forms.MenuItem();
            this.mnuClose = new System.Windows.Forms.MenuItem();
            this.NoMenu = new System.Windows.Forms.MenuItem();
            this.mnuAttr = new System.Windows.Forms.MenuItem();
            this.mnuBorder = new System.Windows.Forms.MenuItem();
            this.mnuPrint = new System.Windows.Forms.MenuItem();
            this.mnuPrintPreview = new System.Windows.Forms.MenuItem();
            this.mnuPrintNow = new System.Windows.Forms.MenuItem();
            this.SuspendLayout();
            // 
            // P1
            // 
            this.P1.AutoScroll = true;
            this.P1.BackColor = System.Drawing.SystemColors.Control;
            this.P1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
            this.P1.Location = new System.Drawing.Point(8, 16);
            this.P1.Name = "P1";
            this.P1.Size = new System.Drawing.Size(768, 520);
            this.P1.TabIndex = 0;
            // 
            // mainMenu1
            // 
            this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                                                                              this.mnuFile,
                                                                              this.NoMenu,
                                                                              this.mnuPrint});
            // 
            // mnuFile
            // 
            this.mnuFile.Index = 0;
            this.mnuFile.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                                                                            this.mnuSave,
                                                                            this.mnuClose});
            this.mnuFile.Text = "&File";
            // 
            // mnuSave
            // 
            this.mnuSave.Index = 0;
            this.mnuSave.Text = "&Save";
            this.mnuSave.Click += new System.EventHandler(this.mnuSave_Click);
            // 
            // mnuClose
            // 
            this.mnuClose.Index = 1;
            this.mnuClose.Text = "&Close";
            this.mnuClose.Click += new System.EventHandler(this.mnuClose_Click);
            // 
            // NoMenu
            // 
            this.NoMenu.Index = 1;
            this.NoMenu.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                                                                           this.mnuAttr,
                                                                           this.mnuBorder});
            this.NoMenu.Text = "&Attributes";
            this.NoMenu.Click += new System.EventHandler(this.mnuAttr_Click);
            // 
            // mnuAttr
            // 
            this.mnuAttr.Index = 0;
            this.mnuAttr.Text = "Resolution";
            this.mnuAttr.Click += new System.EventHandler(this.mnuAttr_Click);
            // 
            // mnuBorder
            // 
            this.mnuBorder.Index = 1;
            this.mnuBorder.Text = "Border";
            this.mnuBorder.Click += new System.EventHandler(this.mnuBorder_Click);
            // 
            // mnuPrint
            // 
            this.mnuPrint.Index = 2;
            this.mnuPrint.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
                                                                             this.mnuPrintPreview,
                                                                             this.mnuPrintNow});
            this.mnuPrint.Text = "&Print";
            // 
            // mnuPrintPreview
            // 
            this.mnuPrintPreview.Index = 0;
            this.mnuPrintPreview.Text = "Pre&view";
            this.mnuPrintPreview.Click += new System.EventHandler(this.mnuPrintPreview_Click);
            // 
            // mnuPrintNow
            // 
            this.mnuPrintNow.Index = 1;
            this.mnuPrintNow.Text = "&Print";
            this.mnuPrintNow.Click += new System.EventHandler(this.mnuPrintNow_Click);
            // 
            // frmSave
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(792, 553);
            this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                  this.P1});
            this.Menu = this.mainMenu1;
            this.MinimizeBox = false;
            this.Name = "frmSave";
            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
            this.Text = "Save Image";
            this.Load += new System.EventHandler(this.frmSave_Load);
            this.ResumeLayout(false);
        }
        #endregion
        private void frmSave_Load(object sender, System.EventArgs e) {
        }
        /// 
        /// This routine makes a blank image and colors it with a hatch brush
        /// This image is handed back to the caller who then uses this image as 
        /// the background image for the panel.  The panel will tile this image 
        /// for as many times as it takes to fill the panel.
        /// 

        private Image GetPanelImage() {
            Image i = new Bitmap(50, 50);
            using(Graphics G = Graphics.FromImage(i)) {
            //No need for high quality here.  We need Speed!!!
                G.SmoothingMode = SmoothingMode.HighSpeed;
                Brush B = new HatchBrush(HatchStyle.Cross, Color.Cyan, Color.LightCyan);
                G.FillRectangle(B, 0, 0, i.Width, i.Height);
            }
            return i;
        }
        private void mnuAttr_Click(object sender, System.EventArgs e)  {
            Attributes frm = new Attributes(m_bmp.HorizontalResolution, m_bmp.Size);
            frm.ShowDialog();
            m_bmp.SetResolution(frm.SaveRes, frm.SaveRes);
        }
        private void mnuClose_Click(object sender, System.EventArgs e) {
            this.Close();
        }
        private void mnuSave_Click(object sender, System.EventArgs e) {
            SaveFileDialog sd = new SaveFileDialog();
 
            sd.Filter = "Bitmap (*.bmp)|*.bmp|" +
                  "JPEG (*.jpg)|*.jpg|" + 
                  "GIF (*.Gif)|*.gif|"  +
                  "TIFF (*.tif)|*.tif|"  +
                  "PNG (*.png)|*.png|"  +
                  "EMF (*.emf)|*.emf"  ;
            sd.FilterIndex = 1 ;
            sd.RestoreDirectory = true ;
            sd.AddExtension = true;
 
            if(sd.ShowDialog() == DialogResult.OK)  {
                if (sd.FileName.Length != 0) {
                    switch(sd.FilterIndex) {
                        case 1:
                        //Save as bitmap
                            m_bmp.Save(sd.FileName, ImageFormat.Bmp);
                            break;
                        case 2:
                        //Save as JPEG
                            m_bmp.Save(sd.FileName, ImageFormat.Jpeg);
                            break;
                        case 3:
                        //Save as GIF
                            m_bmp.Save(sd.FileName, ImageFormat.Gif);
                            break;
                        case 4:
                        //Save as TIFF
                            m_bmp.Save(sd.FileName, ImageFormat.Tiff);
                            break;
                        case 5:
                        //Save as PNG
                            m_bmp.Save(sd.FileName, ImageFormat.Png);
                            break;
                        case 6:
                        //Save as EMF
                            m_bmp.Save(sd.FileName, ImageFormat.Emf);
                            break;
                        default:
                            break;
                    }
                }
            }
        }
        #region Printer routines
        private void pd_BeginPrint ( object sender, PrintEventArgs e) {
            Pd.DocumentName = "ScreenShot " + (++PrintCount).ToString();
        }
        private void pd_Print(object sender, PrintPageEventArgs e)  {
            Graphics G = e.Graphics;
            float LeftMargin = e.MarginBounds.Left;
            float TopMargin = e.MarginBounds.Top;
            float BottomMargin = e.MarginBounds.Bottom;
            StringFormat sf = new StringFormat();
            sf.Alignment = StringAlignment.Far;
            sf.LineAlignment = StringAlignment.Center;
            Rectangle Border = e.MarginBounds;
            Border.Inflate(1, 1);
            RectangleF Footer = new Rectangle(e.MarginBounds.Left, 
                                        e.MarginBounds.Bottom,
                                        e.MarginBounds.Width,
                                        e.PageBounds.Bottom - 
                                        e.MarginBounds.Bottom);
            //Type in the footer
            G.DrawString(Pd.DocumentName, FooterFont, Brushes.Black, Footer, sf);
            sf.Alignment = StringAlignment.Near;
            G.DrawString(DateTime.Now.ToLongDateString(), FooterFont, 
                   Brushes.Black, 
                   Footer, sf);
            //Draw the rectangle and the image.  Image is stretched to fit!!!
            G.DrawRectangle(Pens.Black, Border);
            G.DrawImage(m_bmp, e.MarginBounds);
            sf.Dispose();
        }
        private void mnuPrintPreview_Click(object sender, System.EventArgs e) {
            Pv.WindowState = FormWindowState.Maximized;
            Pv.ShowDialog();
        }
        private void mnuPrintNow_Click(object sender, System.EventArgs e) {
            if (Pr.ShowDialog() == DialogResult.OK)
                Pd.Print();
        }
        #endregion
        private void mnuBorder_Click(object sender, System.EventArgs e) {
            if (!mnuBorder.Checked) {
                using (Graphics G = Graphics.FromImage(m_bmp)) {
                    using (Pen P = new Pen(Brushes.Black, 2)) {
                        G.DrawRectangle(P, new Rectangle(0, 0, m_bmp.Size.Width, 
                            m_bmp.Size.Height));
                        m_Pic.Image = m_bmp;
                        mnuBorder.Checked = true;
                    }
                }
            }  else {
                m_bmp = (Bitmap)m_OriginalBmp.Clone();
                m_Pic.Image = m_bmp;
                mnuBorder.Checked = false;
            }
        }
    }
    /// 
    ///  Copyright Nicholas Symmonds 2002
    /// This software is for instructional purposes only.
    /// It may not be sold as is.
    /// 
    /// This form is the one that holds the complete bitmap of the screen.  
    /// The border is set to nothing and the form is maximized.  The cursor 
    /// is also changed to tell the user (s)he can now drag a line and make 
    /// a capture box. When the screen is captured this form shows up almost 
    /// immediately.
    /// 

    public class dtBitmap : Form {
        #region Class local storage
        private Bitmap bmp;
        private Rectangle InvalidRect = Rectangle.Empty;
        private Pen mRectPen;
        private Corectangle mbmpRect;
        #endregion
    
        public dtBitmap(Bitmap b) {
            mbmpRect = new  Corectangle();
            mRectPen = new Pen(Brushes.Red, 1);
            mRectPen.DashStyle = DashStyle.DashDot;
            bmp = b.Clone(new RectangleF(0, 0, b.Width, b.Height), b.PixelFormat);
            this.SetStyle(ControlStyles.AllPaintingInWmPaint,true);
            this.SetStyle(ControlStyles.DoubleBuffer,true);
            this.Size = bmp.Size;
            this.FormBorderStyle = FormBorderStyle.None;
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Cursor = new Cursor("hcross.cur");
            this.BackgroundImage = bmp;
            //Show as modal
            this.ShowDialog();
        }
        private void InitializeComponent() {
            // 
            // dtBitmap
            // 
            this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
            this.ClientSize = new System.Drawing.Size(292, 273);
            this.Name = "dtBitmap";
            this.Load += new System.EventHandler(this.dtBitmap_Load);
        }
        protected override void Dispose( bool disposing ) {
            if( disposing ) {
                if (bmp != null)
                    bmp.Dispose();
            }
            base.Dispose( disposing );
        }
        public Bitmap GetBitmap {
            get{return bmp;}
        }
        private void dtBitmap_Load(object sender, System.EventArgs e) {
        }
        protected override void OnPaint(PaintEventArgs e) {
            base.OnPaint(e);
            e.Graphics.DrawRectangle(mRectPen, mbmpRect.Rect);
        }
        #region Squeek
        protected override void OnMouseDown(MouseEventArgs e) {
            base.OnMouseDown(e);
            if (e.Button != MouseButtons.Left)
                return;
            mbmpRect = new  Corectangle(e.X, e.Y);
        }
        protected override void OnMouseUp(MouseEventArgs e) {
            base.OnMouseUp(e);
            Invalidate();
            bmp = bmp.Clone(mbmpRect.Rect, bmp.PixelFormat);
            this.Close();
        }
        protected override void OnMouseMove(MouseEventArgs e) {
            base.OnMouseMove(e);
            if (e.Button != MouseButtons.Left)
                return;
            mbmpRect.EndX = e.X;
            mbmpRect.EndY = e.Y;
            Invalidate();
        }
        #endregion
    }
    /// 
    /// Copyright Nicholas Symmonds 2002
    /// This software is for instructional purposes only.
    /// It may not be sold as is.
    /// 
    /// This class encapsulates the API functions necessary to get the
    /// desktop image and form a bitmap from it.
    /// Not everything can be done in GDI+ :)
    /// 

    
    public sealed class DeskTop {
        [DllImport("user32.dll")]
        internal extern static IntPtr GetDesktopWindow();
        [DllImport("user32.dll")]
        internal extern static IntPtr GetDC( IntPtr windowHandle );
        [DllImport("gdi32.dll")]
        internal extern static IntPtr GetCurrentObject( IntPtr hdc, 
                                                    ushort objectType );
        [DllImport("user32.dll")]
        internal extern static void ReleaseDC( IntPtr hdc );
        [DllImport("user32.dll")]
        internal extern static void UpdateWindow( IntPtr hwnd );
        public static Bitmap Capture() {
            //Get a pointer to the desktop window
            IntPtr    desktopWindow = GetDesktopWindow();
            //Get a device context from the desktop window
            IntPtr    desktopDC = GetDC( desktopWindow );
            //Get a GDI handle to the image
            IntPtr    desktopBitmap = GetCurrentObject( desktopDC, 7 );
            //This call takes as an argument the handle to a GDI image
            Bitmap    desktopImage = Image.FromHbitmap( desktopBitmap );
            //Do not create any memory leaks
            ReleaseDC( desktopDC );
            return desktopImage;
        }
    }
    /// 
    /// This class takes any starting point and any ending point
    /// structures and makes a rectangle.  Using this class you can use the mouse
    /// to draw a rectangle on the screen from any starting point to any ending
    /// point.  You cannot do this with a regular rectangle.
    /// 

    public class Corectangle {
        #region Class Local Variables
        private Point mStart;
        private Point mEnd;
        private Point mRealStart;
        private Point mRealEnd;
        private Size  mRealSize;
        private Rectangle mRect;
        #endregion
        public Corectangle(int X, int Y)  {
            mStart        = Point.Empty;
            mEnd          = Point.Empty;
            mRealStart    = Point.Empty;
            mRealEnd      = Point.Empty;
            mRealSize     = Size.Empty;
            mStart.X      = X;
            mStart.Y      = Y;
            mRealStart.X  = X;
            mRealStart.Y  = Y;
            mRect = Rectangle.Empty;
        }
        public Corectangle() {
            mStart        = Point.Empty;
            mEnd          = Point.Empty;
            mRealStart    = Point.Empty;
            mRealEnd      = Point.Empty;
            mRealSize     = Size.Empty;
            mStart.X      = 0;
            mStart.Y      = 0;
            mRealStart.X  = 0;
            mRealStart.Y  = 0;
            mRect = Rectangle.Empty;
        }
        /// 
        /// Ending X Value of rectangle
        /// 

        public int EndX {
            set{ mEnd.X = value; 
            }
        }
        /// 
        /// Ending Y Value of rectangle
        /// 

        public int EndY {
            set{ 
                mEnd.Y = value; 
            }
        }
        /// 
        /// Get the corrected rectangle
        /// 

        public Rectangle Rect {
            get { 
                MakeReal();
                mRect.Location = mRealStart;
                mRect.Size = mRealSize;
                return mRect; 
            }
        }
        private void MakeReal() {
            //Started top left, ended bottom right
            if (mEnd.X > mStart.X && mEnd.Y > mStart.Y) {
                mRealStart = mStart;
                mRealEnd = mEnd;
                mRealSize = new Size(mRealEnd.X-mRealStart.X, mRealEnd.Y-mRealStart.Y);
                return;
            }
            //Started bottom right, ended top left
            if (mEnd.X < mStart.X && mEnd.Y < mStart.Y) {
                mRealEnd = mStart;
                mRealStart = mEnd;
                mRealSize = new Size(mRealEnd.X-mRealStart.X, mRealEnd.Y-mRealStart.Y);
                return;
            }
            //Started top right left, ended bottom left
            if (mEnd.X < mStart.X && mEnd.Y > mStart.Y) {
                mRealStart.X = mEnd.X;
                mRealStart.Y = mStart.Y;
                mRealEnd.X   = mStart.X;
                mRealEnd.Y   = mEnd.Y;
                mRealSize = new Size(mRealEnd.X-mRealStart.X, mRealEnd.Y-mRealStart.Y);
                return;
            }
            //Started bottom left, ended top right
            if (mEnd.X > mStart.X && mEnd.Y < mStart.Y) {
                mRealStart.X = mStart.X;
                mRealStart.Y = mEnd.Y;
                mRealEnd.X   = mEnd.X;
                mRealEnd.Y   = mStart.Y;
                mRealSize = new Size(mRealEnd.X-mRealStart.X, mRealEnd.Y-mRealStart.Y);
                return;
            }
        }
    }
    /// 
    /// Summary description for Attributes.
    /// 

    public class Attributes : System.Windows.Forms.Form  {
        private float m_Res;
        private System.Windows.Forms.Label lblCurrentRes;
        private System.Windows.Forms.Label lblRes;
        private System.Windows.Forms.Button cmdOK;
        private System.Windows.Forms.GroupBox groupBox1;
        private System.Windows.Forms.RadioButton optCurrent;
        private System.Windows.Forms.RadioButton opt120;
        private System.Windows.Forms.RadioButton opt150;
        private System.Windows.Forms.RadioButton opt300;
        private System.Windows.Forms.Label lblSize;
        private System.Windows.Forms.Label lblSizeVal;
        /// 
        /// Required designer variable.
        /// 

        private System.ComponentModel.Container components = null;
        public Attributes(float CurrentResolution, Size sz) {
            InitializeComponent();
            m_Res = CurrentResolution;
            lblRes.Text = m_Res.ToString() + " DPI";
            lblSizeVal.Text = sz.Width.ToString() + "w X " + sz.Height.ToString() + "h";
            optCurrent.Checked = true;
            this.Opacity = 1.0;
        }
        /// 
        /// Clean up any resources being used.
        /// 

        protected override void Dispose( bool disposing )
        {
            if( disposing )
            {
                if(components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose( disposing );
        }
        #region Windows Form Designer generated code
        /// 
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// 

        private void InitializeComponent()
        {
            this.lblCurrentRes = new System.Windows.Forms.Label();
            this.lblRes = new System.Windows.Forms.Label();
            this.cmdOK = new System.Windows.Forms.Button();
            this.groupBox1 = new System.Windows.Forms.GroupBox();
            this.opt300 = new System.Windows.Forms.RadioButton();
            this.opt150 = new System.Windows.Forms.RadioButton();
            this.opt120 = new System.Windows.Forms.RadioButton();
            this.optCurrent = new System.Windows.Forms.RadioButton();
            this.lblSize = new System.Windows.Forms.Label();
            this.lblSizeVal = new System.Windows.Forms.Label();
            this.groupBox1.SuspendLayout();
            this.SuspendLayout();
            // 
            // lblCurrentRes
            // 
            this.lblCurrentRes.Location = new System.Drawing.Point(24, 16);
            this.lblCurrentRes.Name = "lblCurrentRes";
            this.lblCurrentRes.Size = new System.Drawing.Size(160, 16);
            this.lblCurrentRes.TabIndex = 0;
            this.lblCurrentRes.Text = "Current Resolution";
          // 
          // lblRes
          // 
          this.lblRes.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
          this.lblRes.Location = new System.Drawing.Point(24, 32);
          this.lblRes.Name = "lblRes";
          this.lblRes.Size = new System.Drawing.Size(152, 16);
          this.lblRes.TabIndex = 1;
          // 
          // cmdOK
          // 
          this.cmdOK.Location = new System.Drawing.Point(232, 160);
          this.cmdOK.Name = "cmdOK";
          this.cmdOK.Size = new System.Drawing.Size(48, 32);
          this.cmdOK.TabIndex = 2;
          this.cmdOK.Text = "OK";
          this.cmdOK.Click += new System.EventHandler(this.cmdOK_Click);
          // 
          // groupBox1
          // 
          this.groupBox1.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                                this.opt300,
                                                                                this.opt150,
                                                                                this.opt120,
                                                                                this.optCurrent});
          this.groupBox1.Location = new System.Drawing.Point(24, 64);
          this.groupBox1.Name = "groupBox1";
          this.groupBox1.Size = new System.Drawing.Size(168, 128);
          this.groupBox1.TabIndex = 3;
          this.groupBox1.TabStop = false;
          this.groupBox1.Text = "Save Resolution";
          // 
          // opt300
          // 
          this.opt300.Location = new System.Drawing.Point(16, 96);
          this.opt300.Name = "opt300";
          this.opt300.Size = new System.Drawing.Size(104, 16);
          this.opt300.TabIndex = 3;
          this.opt300.Text = "300 DPI";
          // 
          // opt150
          // 
          this.opt150.Location = new System.Drawing.Point(16, 72);
          this.opt150.Name = "opt150";
          this.opt150.Size = new System.Drawing.Size(104, 16);
          this.opt150.TabIndex = 2;
          this.opt150.Text = "150 DPI";
          // 
          // opt120
          // 
          this.opt120.Location = new System.Drawing.Point(16, 48);
          this.opt120.Name = "opt120";
          this.opt120.Size = new System.Drawing.Size(104, 16);
          this.opt120.TabIndex = 1;
          this.opt120.Text = "120 DPI";
          // 
          // optCurrent
          // 
          this.optCurrent.Location = new System.Drawing.Point(16, 24);
          this.optCurrent.Name = "optCurrent";
          this.optCurrent.Size = new System.Drawing.Size(104, 16);
          this.optCurrent.TabIndex = 0;
          this.optCurrent.Text = "Current";
          // 
          // lblSize
          // 
          this.lblSize.Location = new System.Drawing.Point(192, 16);
          this.lblSize.Name = "lblSize";
          this.lblSize.Size = new System.Drawing.Size(88, 16);
          this.lblSize.TabIndex = 4;
          this.lblSize.Text = "Size";
          // 
          // lblSizeVal
          // 
          this.lblSizeVal.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
          this.lblSizeVal.Location = new System.Drawing.Point(192, 32);
          this.lblSizeVal.Name = "lblSizeVal";
          this.lblSizeVal.Size = new System.Drawing.Size(88, 16);
          this.lblSizeVal.TabIndex = 5;
          // 
          // Attributes
          // 
          this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
          this.ClientSize = new System.Drawing.Size(294, 205);
          this.Controls.AddRange(new System.Windows.Forms.Control[] {
                                                                      this.lblSizeVal,
                                                                      this.lblSize,
                                                                      this.groupBox1,
                                                                      this.cmdOK,
                                                                      this.lblRes,
                                                                      this.lblCurrentRes});
          this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedSingle;
          this.MaximizeBox = false;
          this.MinimizeBox = false;
          this.Name = "Attributes";
          this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
          this.Text = "Attributes";
          this.Load += new System.EventHandler(this.Attributes_Load);
          this.groupBox1.ResumeLayout(false);
          this.ResumeLayout(false);
        }
        #endregion
        private void Attributes_Load(object sender, System.EventArgs e) {
        }
        public float SaveRes { 
            get{
               return m_Res;
            } 
        }
        private void cmdOK_Click(object sender, System.EventArgs e)  {
            if (opt120.Checked)
                m_Res = 120f;
            if (opt150.Checked)
                m_Res = 150f;
            if (opt300.Checked)
                m_Res = 300f;
            this.Close();
        }
    }
    
}
           
       
Clipper-c.zip( 72 k)