* Form.cs : TopLevel, AcceptButton, CancelButton
[mono.git] / mcs / class / System.Windows.Forms / System.Windows.Forms / Form.cs
index 2f44ba4823571ba816abbacb8c7f9b41b290fd61..b2d7cfd8794153fda1fa27440e13f51e283430a7 100644 (file)
-    //\r
-    // System.Windows.Forms.Form\r
-    //\r
-    // Author:\r
-    //   Miguel de Icaza (miguel@ximian.com)\r
-    //   stubbed out by Daniel Carrera (dcarrera@math.toronto.edu)\r
-    // Dennis Hayes (dennish@raytek.com)\r
-    //   WINELib implementation started by John Sohn (jsohn@columbus.rr.com)\r
-    //\r
-    // (C) 2002 Ximian, Inc\r
-    //\r
-    \r
-    using System;\r
-    using System.Drawing;\r
-    using System.ComponentModel;\r
-    using System.Collections;\r
-    \r
-    namespace System.Windows.Forms {\r
-    \r
-       public class Form : ContainerControl  {\r
-                       DialogResult dialogResult;\r
-                       Size maximumSize;\r
-                       Size minimizeSize;\r
-                       double opacity;\r
-                       // Temperary varibles that may be replaced\r
-                       // with win32 functions\r
-\r
-                       // owner draw \r
-                       private bool controlBox;\r
-                       private bool minimizeBox;\r
-                       private bool maximizeBox;\r
-                       private bool helpButton;\r
-                       //end owner draw\r
-                       \r
-                       FormBorderStyle formBorderStyle;\r
-\r
-                       // End of temperay varibles\r
-\r
-                       public Form () : base ()\r
-               {\r
-                               opacity = 0;\r
-\r
-               }\r
-               \r
-               static Form ()\r
-               {\r
-\r
-               }\r
-               \r
-               //  --- Public Properties\r
-               //\r
-               [MonoTODO]\r
-               public IButtonControl AcceptButton {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public static Form ActiveForm {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public Form ActiveMdiChild {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public bool AutoScale {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-                       internal Size autoscalebasesize; //debug/test only\r
-\r
-               [MonoTODO]\r
-               public virtual Size AutoScaleBaseSize {\r
-                       get {\r
-                               return autoscalebasesize;\r
-                       }\r
-                       set {\r
-                               autoscalebasesize = value;\r
-                       }\r
-               }\r
-    \r
-               public override bool AutoScroll {\r
-                       get {\r
-                               return base.AutoScroll;\r
-                       }\r
-                       set {\r
-                               base.AutoScroll = value;\r
-                       }\r
-               }\r
-    \r
-               public override Color BackColor {\r
-                       get {\r
-                               return base.BackColor;\r
-                       }\r
-                       set {\r
-                               base.BackColor = value;\r
-                       }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public IButtonControl CancelButton {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public new Size ClientSize {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //bool MenuReady;\r
-                                       //if(mainMenu_\r
-                                       SetClientSize( value, (int)WindowStyles.WS_OVERLAPPEDWINDOW, mainMenu_ != null);\r
-                               }\r
-               }\r
-    \r
-                       //Compact Framework\r
-                       //FIXME:\r
-                       // In .NET this can be changed at any time.\r
-                       // In WIN32 this is fixed when the window is created.\r
-                       // In WIN32 to change this after the window is created,\r
-                       // like in .NET, we must draw the caption bar our self.\r
-                       // In the mean time, just set/return a bool.\r
-                       // This might be the start of the drawing\r
-               [MonoTODO]\r
-               public bool ControlBox {\r
-                       get {\r
-                               return controlBox;\r
-                       }\r
-                       set {\r
-                               controlBox = value;\r
-                                       //force paint\r
-                       }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public Rectangle DesktopBounds {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public Point DesktopLocation {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-                       //Compact Framework\r
-               [MonoTODO]\r
-               public DialogResult DialogResult {\r
-                       get {\r
-                               return dialogResult;\r
-                       }\r
-                       set {\r
-                               dialogResult = value;\r
-                       }\r
-               }\r
-    \r
-                       //Compact Framework\r
-               [MonoTODO]\r
-               public FormBorderStyle FormBorderStyle {\r
-                       get {\r
-                               return formBorderStyle;\r
-                       }\r
-                       set {\r
-                               formBorderStyle = value;\r
-                       }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public bool HelpButton {\r
-                       get {\r
-                               return helpButton;\r
-                       }\r
-                       set {\r
-                               helpButton = value;\r
-                       }\r
-               }\r
-    \r
-                       //Compact Framework\r
-                       //[MonoTODO]\r
-               public Icon Icon {\r
-                        get {\r
-                                throw new NotImplementedException ();\r
-                        }\r
-                        set {\r
-                                        //FIXME:\r
-                                }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public bool IsMidiChild {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public bool IsMidiContainer {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public bool KeyPreview {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-                       //Compact Framework\r
-               [MonoTODO]\r
-               public bool MaximizeBox {\r
-                       get {\r
-                               return maximizeBox;\r
-                       }\r
-                       set {\r
-                               maximizeBox = value;\r
-                       }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public Size MaximumSize {\r
-                       get {\r
-                               return maximumSize;\r
-                       }\r
-                       set {\r
-                               maximumSize = value;\r
-                       }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public Form[] MdiChildren {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public Form MdiParent {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-                       //Compact Framework\r
-                       //[MonoTODO]\r
-                               private MainMenu mainMenu_ = null;\r
-\r
-                               private void assignMenu()\r
-                               {\r
-                                       if( Handle != IntPtr.Zero ) {\r
-                                       // FIXME: If Form's window has no style for menu,  probably, better to add it\r
-                                       // if menu have to be removed, remove the style.\r
-                                       // Attention to the repainting.\r
-                                               if( mainMenu_ != null) {\r
-//                                                     //long myStyle = Win32.GetWindowLongA( Handle, Win32.GWL_STYLE);\r
-//                                                     //myStyle |= (long)Win32.WS_OVERLAPPEDWINDOW;\r
-//                                                     //Win32.SetWindowLongA( Handle, Win32.GWL_STYLE, myStyle);\r
-                                                       Win32.SetMenu( Handle, mainMenu_.Handle);\r
-                                               }\r
-                                               else {\r
-                                                       Win32.SetMenu( Handle, IntPtr.Zero);\r
-                                               }\r
-                                       }\r
-                               }\r
-\r
-               public MainMenu Menu {\r
-                       get {\r
-                               return mainMenu_;\r
-                       }\r
-                       set {\r
-                               mainMenu_ = value;\r
-                                               assignMenu();\r
-                       }\r
-               }\r
-\r
-               //[MonoTODO]\r
-               //public MainMenu MergedMenu {\r
-               //      get {\r
-               //              throw new NotImplementedException ();\r
-               //      }\r
-               //}\r
-    \r
-                       //Compact Framework\r
-               [MonoTODO]\r
-               public bool MinimizeBox {\r
-                       get {\r
-                               return minimizeBox;\r
-                       }\r
-                       set {\r
-                               minimizeBox = value;\r
-                       }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public Size MinimumSize {\r
-                       get {\r
-                               return maximumSize;\r
-                       }\r
-                       set {\r
-                               maximumSize = value;\r
-                       }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public bool Modal {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public double Opacity {\r
-                       get {\r
-                               return opacity;\r
-                       }\r
-                       set {\r
-                               opacity = value;\r
-                       }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public Form[] OwnedForms {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public Form Owner {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public bool ShowInTaskbar {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-    \r
-               public override ISite Site {\r
-                       get {\r
-                               return base.Site;\r
-                       }\r
-                       set {\r
-                               base.Site = value;\r
-                       }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public SizeGripStyle SizeGripStyle {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public FormStartPosition StartPosition {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public bool TopLevel {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public bool TopMost {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public Color TransparencyKey {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-    \r
-                       //Compact Framework\r
-               [MonoTODO]\r
-               public FormWindowState WindowState {\r
-                       get {\r
-                                       WINDOWPLACEMENT placement = new WINDOWPLACEMENT();\r
-\r
-                               //bool ReturnValue = Win32.GetWindowPlacement(Handle, ref placement ) ;\r
-                                       //if(placement.showCmd == SW_MINIMIZE){\r
-                                       //      return FormWindowState.Minimized;\r
-                                       //}\r
-                                       //if(placement.showCmd == SW_MAXIMIZE){\r
-                                       //      return FormWindowState.Maximized;\r
-                                       //}\r
-                                       return FormWindowState.Normal;\r
-                                       //Other options such as hide are possible in win32, but not in this part of .NET\r
-                                       // also this may not work because it looks like showCmd is for setting, and might not be set\r
-                                       // by win32 in a get.\r
-                               }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-               \r
-               //  --- Public Methods\r
-               public void Activate ()\r
-               {\r
-                       Win32.SetActiveWindow (Handle);\r
-               }\r
-    \r
-               [MonoTODO]\r
-               public void AddOwnedForm (Form ownedForm)\r
-               {\r
-                               //FIXME:\r
-                       }\r
-    \r
-                       //Compact Framework\r
-               public void Close ()\r
-               {\r
-                       Win32.CloseWindow (Handle);\r
-               }\r
-    \r
-                       [MonoTODO]\r
-               public void LayoutMdi (MdiLayout value)\r
-               {\r
-                               //FIXME:\r
-                       }\r
-    \r
-               [MonoTODO]\r
-               public void RemoveOwnedForm (Form ownedForm)\r
-               {\r
-                               //FIXME:\r
-                       }\r
-    \r
-     \r
-               public void SetDesktopLocation (int x, int y)\r
-               {\r
-                       Win32.SetWindowPos ((IntPtr) Handle, SetWindowPosZOrder.HWND_TOPMOST, \r
-                                           x, y, 0, 0, \r
-                                           SetWindowPosFlags.SWP_NOSIZE | \r
-                                           SetWindowPosFlags.SWP_NOZORDER);\r
-               }\r
-    \r
-    \r
-               [MonoTODO]\r
-               public DialogResult ShowDialog ()\r
-               {\r
-                               Win32.ShowWindow (Handle, ShowWindowStyles.SW_SHOW);\r
-                               return new DialogResult();\r
-                       }\r
-    \r
-                       //Compact Framework\r
-               [MonoTODO]\r
-               public override string ToString ()\r
-               {\r
-                               //FIXME:\r
-                               return base.ToString();\r
-               }\r
-    \r
-               //  --- Public Events\r
-               \r
-               public event EventHandler Activated;\r
-               \r
-               public event EventHandler Closed;\r
-                \r
-                       //Compact Framework\r
-               // CancelEventHandler not yet implemented/stubbed\r
-               //public event CancelEventHandler Closing;\r
-               \r
-               public event EventHandler Deactivate;\r
-               public event InputLanguageChangedEventHandler InputLanguageChanged;\r
-               public event InputLanguageChangingEventHandler InputLanguageChanging;\r
-\r
-                       //Compact Framework\r
-               public event EventHandler  Load;\r
-               \r
-                       public event EventHandler  MaximizedBoundsChanged;\r
-               public event EventHandler MaximumSizeChanged;\r
-               public event EventHandler  MdiChildActivate;\r
-               public event EventHandler  MenuComplete;\r
-               public event EventHandler  MenuStart;\r
-               public event EventHandler  MinimumSizedChanged;\r
-    \r
-               \r
-               //  --- Protected Properties\r
-               \r
-               protected override CreateParams CreateParams {\r
-                       get {\r
-                               return base.CreateParams;\r
-                       }\r
-               }\r
-    \r
-               protected override ImeMode DefaultImeMode {\r
-                       get {\r
-                               return base.DefaultImeMode;\r
-                       }\r
-               }\r
-    \r
-               protected override Size DefaultSize {\r
-                               get {\r
-                                       return new Size(300,300);\r
-                               }\r
-                       }\r
-    \r
-               [MonoTODO]\r
-                       public new Size Size {\r
-                               get {\r
-                                       throw new NotImplementedException ();\r
-                               }\r
-                               set {\r
-                                       //FIXME:\r
-                               }\r
-                       }\r
\r
-                       [MonoTODO]\r
-               protected Rectangle MaximizedBounds {\r
-                       get {\r
-                               throw new NotImplementedException ();\r
-                       }\r
-                       set {\r
-                                       //FIXME:\r
-                               }\r
-               }\r
-    \r
-               \r
-               //  --- Protected Methods\r
-               \r
-               protected override void AdjustFormScrollbars (\r
-                       bool displayScrollbars)\r
-               {\r
-                       base.AdjustFormScrollbars (displayScrollbars);\r
-               }\r
-    \r
-               protected override Control.ControlCollection \r
-               CreateControlsInstance ()\r
-               {\r
-                       return base.CreateControlsInstance ();\r
-               }\r
-    \r
-               protected override void CreateHandle ()\r
-               {\r
-                       base.CreateHandle ();\r
-    \r
-                       if (IsHandleCreated)\r
-                               OnHandleCreated (new EventArgs());\r
-               }\r
-    \r
-               protected override void DefWndProc (ref Message m)\r
-               {\r
-                       window.DefWndProc (ref m);\r
-               }\r
-\r
-                       //Compact Framework\r
-               protected virtual void OnClosed (EventArgs e)\r
-               {\r
-                       if (Closed != null)\r
-                               Closed (this, e);\r
-               }\r
-    \r
-                       //Compact Framework\r
-               [MonoTODO]\r
-               protected virtual void  OnClosing(CancelEventArgs e)\r
-               {\r
-                               throw new NotImplementedException ();\r
-               }\r
-    \r
-               protected override void OnCreateControl ()\r
-               {\r
-                       base.OnCreateControl ();\r
-               }\r
-    \r
-               protected override void OnFontChanged (EventArgs e)\r
-               {\r
-                       base.OnFontChanged (e);\r
-               }\r
-    \r
-               protected override void OnHandleCreated (EventArgs e)\r
-               {\r
-                       Console.WriteLine ("OnHandleCreated");\r
-                                       assignMenu();\r
-                       base.OnHandleCreated (e);\r
-               }\r
-    \r
-               protected override void OnHandleDestroyed (EventArgs e)\r
-               {\r
-                       base.OnHandleDestroyed (e);\r
-               }\r
-    \r
-               protected virtual void OnInputLanguageChanged (\r
-                       InputLanguageChangedEventArgs e)\r
-               {\r
-                       if (InputLanguageChanged != null)\r
-                               InputLanguageChanged (this, e);\r
-               }\r
-    \r
-               protected virtual void OnInputLanguagedChanging (\r
-                       InputLanguageChangingEventArgs e)\r
-               {\r
-                       if (InputLanguageChanging != null)\r
-                               InputLanguageChanging (this, e);\r
-               }\r
-    \r
-                       //Compact Framework\r
-               protected virtual void OnLoad (EventArgs e)\r
-               {\r
-                       if (Load != null)\r
-                               Load (this, e);\r
-               }\r
-    \r
-               protected virtual void OnMaximizedBoundsChanged (EventArgs e)\r
-               {\r
-                       if (MaximizedBoundsChanged != null)\r
-                               MaximizedBoundsChanged (this, e);\r
-               }\r
-    \r
-               protected virtual void OnMaximumSizeChanged (EventArgs e)\r
-               {\r
-                       if (MaximumSizeChanged != null)\r
-                               MaximumSizeChanged (this, e);\r
-               }\r
-    \r
-               protected virtual void OnMdiChildActivate (EventArgs e)\r
-               {\r
-                       if (MdiChildActivate != null)\r
-                               MdiChildActivate (this, e);\r
-               }\r
-    \r
-               protected virtual void OnMenuComplete (EventArgs e)\r
-               {\r
-                       if (MenuComplete != null)\r
-                               MenuComplete (this, e);\r
-               }\r
-    \r
-               protected virtual void OnMenuStart (EventArgs e)\r
-               {\r
-                       if (MenuStart != null)\r
-                               MenuStart (this, e);\r
-               }\r
-    \r
-               protected virtual void OnMinimumSizeChanged (EventArgs e)\r
-               {\r
-                               //FIXME:\r
-                       }\r
-    \r
-                       //Compact Framework\r
-               protected override void  OnPaint (PaintEventArgs e)\r
-               {\r
-                       base.OnPaint (e);\r
-               }\r
-    \r
-                       //Compact Framework\r
-               protected override void  OnResize (EventArgs e)\r
-               {\r
-                       base.OnResize (e);\r
-               }\r
-    \r
-               protected override void  OnStyleChanged (EventArgs e)\r
-               {\r
-                       base.OnStyleChanged (e);\r
-               }\r
-    \r
-                       //Compact Framework\r
-               protected override void  OnTextChanged (EventArgs e)\r
-               {\r
-                       base.OnTextChanged (e);\r
-               }\r
-    \r
-               protected override void  OnVisibleChanged (EventArgs e)\r
-               {\r
-                       base.OnVisibleChanged (e);\r
-               }\r
-\r
-               protected virtual IntPtr OnMenuCommand (uint id)\r
-               {\r
-                       //base.OnVisibleChanged (e);\r
-                                       System.Console.WriteLine("Form on command {0}", id);\r
-                                       if(Menu != null) {\r
-                                               MenuItem mi = Menu.GetMenuItemByID( id);\r
-                                               if( mi != null) {\r
-                                                       mi.PerformClick();\r
-                                               }\r
-                                       }\r
-                                       return IntPtr.Zero;\r
-               }\r
-\r
-                               protected virtual IntPtr OnWmCommand (ref Message m)\r
-                               {\r
-                                       uint wNotifyCode = (uint) ( ((uint)m.WParam.ToInt32() & 0xFFFF0000) >> 16);\r
-                                       uint wID = (uint)(m.WParam.ToInt32() & 0x0000FFFFL);\r
-                                       if( m.LParam.ToInt32() == 0) {\r
-                                               if( wNotifyCode == 0) {\r
-                                                       // Menu\r
-                                                       return OnMenuCommand(wID);\r
-                                               }\r
-                                               else if( wNotifyCode == 1) {\r
-                                                       // Accelerator\r
-                                               }\r
-                                       }\r
-                                       else {\r
-                                               // Control notification\r
-                                               System.Console.WriteLine("Control notification Code {0} Id {1} Hwnd {2}", wNotifyCode, wID, m.LParam.ToInt32());\r
-                                               Control ctrl = Control.FromHandle(m.LParam);\r
-                                               if( ctrl != null) {\r
-                                                       ctrl.OnWmCommand(wNotifyCode, wID, m.LParam);\r
-                                               }\r
-                                       }\r
-                                       return new IntPtr(1);\r
-                               }\r
-\r
-                               protected override bool ProcessCmdKey ( ref Message msg, Keys keyData)\r
-               {\r
-                       return base.ProcessCmdKey (ref msg, keyData);\r
-               }\r
-    \r
-               protected override bool ProcessDialogKey (Keys keyData)\r
-               {\r
-                       return base.ProcessDialogKey (keyData);\r
-               }\r
-    \r
-               protected override bool ProcessKeyPreview (ref Message m)\r
-               {\r
-                       return base.ProcessKeyPreview (ref m);\r
-               }\r
-\r
-               protected override bool ProcessTabKey (bool forward)\r
-               {\r
-                       return base.ProcessTabKey (forward);\r
-               }\r
-    \r
-               protected override void ScaleCore (float x, float y)\r
-               {\r
-                       base.ScaleCore (x, y);\r
-               }\r
-    \r
-               protected override void SetBoundsCore (\r
-                       int x, int y,  int width, int height,  \r
-                       BoundsSpecified specified)\r
-               {\r
-                       base.SetBoundsCore (x, y, width, height, specified);\r
-               }\r
-    \r
-               protected override void SetClientSizeCore (int x, int y)\r
-               {\r
-                       base.SetClientSizeCore (x, y);\r
-               }\r
-    \r
-               protected override void SetVisibleCore (bool value)\r
-               {\r
-                       base.SetVisibleCore (value);\r
-               }\r
-\r
-               protected override void WndProc (ref Message m)\r
-               {\r
-                       base.WndProc (ref m);\r
-    \r
-                       switch (m.Msg) {\r
-                       case Msg.WM_CLOSE:\r
-                               EventArgs closeArgs = new EventArgs();\r
-                               OnClosed (closeArgs);\r
-                               break;\r
-                               //case ?:\r
-                               //OnCreateControl()\r
-                               //break;\r
-                       case Msg.WM_FONTCHANGE:\r
-                               EventArgs fontChangedArgs = new EventArgs();\r
-                               OnFontChanged (fontChangedArgs);\r
-                               break;\r
-                       case Msg.WM_CREATE:\r
-                               EventArgs handleCreatedArgs = new EventArgs(); \r
-                               OnHandleCreated (handleCreatedArgs);\r
-                               break;\r
-                       case Msg.WM_DESTROY:\r
-                               EventArgs destroyArgs = new EventArgs();\r
-                               OnHandleDestroyed (destroyArgs);\r
-                               break;\r
-                       case Msg.WM_INPUTLANGCHANGE:\r
-                               //InputLanguageChangedEventArgs ilChangedArgs =\r
-                               //      new InputLanguageChangedEventArgs();\r
-                               //OnInputLanguageChanged (ilChangedArgs);\r
-                               break;\r
-                       case Msg.WM_INPUTLANGCHANGEREQUEST:\r
-                               //InputLanguageChangingEventArgs ilChangingArgs =\r
-                               //      new InputLanguageChangingEventArgs();\r
-                               //OnInputLanguagedChanging (ilChangingArgs);\r
-                               break;\r
-                               /*\r
-                                 case Win32.WM_SHOWWINDOW:\r
-                                 EventArgs e;\r
-                                 OnLoad (e);\r
-                                 break;\r
-                               */\r
-                               // case ?:\r
-                               // OnMaximizedBoundsChanged(EventArgs e)\r
-                               // break;\r
-                               // case ?:\r
-                               // OnMaximumSizedChanged(EventArgs e)\r
-                               //break;\r
-                       case Msg.WM_MDIACTIVATE:\r
-                               EventArgs mdiActivateArgs = new EventArgs();\r
-                               OnMdiChildActivate (mdiActivateArgs);\r
-                               break;\r
-                       case Msg.WM_EXITMENULOOP:\r
-                               EventArgs menuCompleteArgs = new EventArgs();\r
-                               OnMenuComplete (menuCompleteArgs);\r
-                               break;\r
-                       case Msg.WM_ENTERMENULOOP:\r
-                               EventArgs enterMenuLoopArgs = new EventArgs();\r
-                               OnMenuStart (enterMenuLoopArgs);\r
-                               break;\r
-                               // case ?:\r
-                               // OnMinimumSizeChanged(EventArgs e)\r
-                               // break;\r
-                       case Msg.WM_PAINT:\r
-                               //PaintEventArgs paintArgs = new PaintEventArgs();\r
-                               //OnPaint (paintArgs);\r
-                               break;\r
-                       case Msg.WM_SIZE:\r
-                               EventArgs resizeArgs = new EventArgs();\r
-                               OnResize (resizeArgs);\r
-                               break;\r
-                               //case ?:\r
-                               //OnStyleChanged(EventArgs e)\r
-                               //break;\r
-                       case Msg.WM_SETTEXT:\r
-                               EventArgs textChangedArgs = new EventArgs();\r
-                               OnTextChanged (textChangedArgs);\r
-                               break;\r
-                       case Msg.WM_SHOWWINDOW:\r
-                               EventArgs visibleChangedArgs = new EventArgs();\r
-                               OnVisibleChanged (visibleChangedArgs);\r
-                               break;\r
-                       case Msg.WM_COMMAND:\r
-                               OnWmCommand (ref m);\r
-                               break;\r
-                               case Msg.WM_INITMENU:\r
-                                       OnWmInitMenu (ref m);\r
-                                       break;\r
-                               case Msg.WM_INITMENUPOPUP:\r
-                                       OnWmInitMenuPopup (ref m);\r
-                                       break;\r
-                               case Msg.WM_CTLCOLORLISTBOX:\r
-                                       Control.ReflectMessage( m.LParam, ref m);\r
-                                       break;\r
-                               case Msg.WM_MEASUREITEM:\r
-                                       Control.ReflectMessage( m.WParam, ref m);\r
-                                       break;\r
-                               case Msg.WM_DRAWITEM:\r
-                                       Control.ReflectMessage( m.WParam, ref m);\r
-                                       break;\r
-                               }\r
-               }\r
-               \r
-                       #region new 11.26.2002 from Alexandre Pigolkine (pigolkine@gmx.de)\r
-                       protected virtual void OnWmInitMenu (ref Message m) {\r
-                               Menu mn = System.Windows.Forms.Menu.GetMenuByHandle( m.WParam);\r
-                               if( mn != null) {\r
-                                       mn.OnWmInitMenu();\r
-                               }\r
-                       }\r
-\r
-                       protected virtual void OnWmInitMenuPopup (ref Message m) {\r
-                               Menu mn = System.Windows.Forms.Menu.GetMenuByHandle( m.WParam);\r
-                               if( mn != null) {\r
-                                       mn.OnWmInitMenuPopup();\r
-                               }\r
-                       }\r
-                       #endregion\r
-                       \r
-\r
-               //sub class\r
-               //System.Windows.Forms.Form.ControlCollection.cs\r
-               //\r
-               //Author:\r
-               //  stubbed out by Daniel Carrera (dcarrera@math.toronto.edu)\r
-               //\r
-               // (C) 2002 Ximian, Inc\r
-               //\r
-               //\r
-               // <summary>\r
-               //      This is only a template.  Nothing is implemented yet.\r
-               //\r
-               // </summary>\r
-               // TODO: implement support classes and derive from \r
-               // proper classes\r
-               // FIXME: use this or the one defined on Control?\r
-                       public class  ControlCollectionX : \r
-                       System.Windows.Forms.Control.ControlCollection \r
-                       /*,ICollection*/ {\r
-    \r
-                       //  --- Constructor\r
-                       // base class not defined (yet!)\r
-                       public ControlCollectionX (Form owner) : base(owner) {\r
-    \r
-                       }\r
-               \r
-                       //  --- Public Methods\r
-    \r
-                       // TODO: see what causes this compile error\r
-                       public override void Add(Control value) {\r
-                               base.Add (value);\r
-                       }\r
-    \r
-                       public override bool Equals (object obj) {\r
-                                       //FIXME:\r
-                                       return base.Equals(obj);\r
-                       }\r
-\r
-                       public override int GetHashCode () {\r
-                               //FIXME add our proprities\r
-                               return base.GetHashCode ();\r
-                       }\r
-    \r
-                       public override void Remove(Control value) {\r
-                               base.Remove (value);\r
-                       }\r
-               } // end of Subclass\r
-       }\r
-    }\r
+    //
+    // System.Windows.Forms.Form
+    //
+    // Author:
+    //   Miguel de Icaza (miguel@ximian.com)
+    //   stubbed out by Daniel Carrera (dcarrera@math.toronto.edu)
+    // Dennis Hayes (dennish@raytek.com)
+    //   WINELib implementation started by John Sohn (jsohn@columbus.rr.com)
+    //  Aleksey Ryabchuk (ryabchuk@yahoo.com)
+    // (C) 2002/3 Ximian, Inc
+    //
+    
+    using System;
+    using System.Drawing;
+    using System.ComponentModel;
+    using System.Collections;
+    using System.Runtime.InteropServices;
+
+    namespace System.Windows.Forms {
+    
+       public class Form : ContainerControl  {
+                       DialogResult dialogResult;
+                       Size maximumSize;
+                       Size minimumSize;
+                       double opacity;
+                       bool   autoScale;
+
+                       private bool controlBox;
+                       private bool minimizeBox;
+                       private bool maximizeBox;
+                       private bool helpButton;
+                       
+                       FormBorderStyle formBorderStyle;
+
+                       // End of temperay varibles
+
+               internal class MdiClient : Control {
+                       public MdiClient ( Control parent ) : base (parent, "") {
+                       }
+                       protected override CreateParams CreateParams {
+                               get {
+                                       CreateParams pars = new CreateParams();
+
+                                       pars.ClassName = Win32.MDICLIENTCLASSNAME;
+                                       pars.Style = (int) (    WindowStyles.WS_CHILDWINDOW |
+                                                               WindowStyles.WS_CLIPCHILDREN |
+                                                               WindowStyles.WS_CLIPSIBLINGS |
+                                                               WindowStyles.WS_OVERLAPPED |
+                                                               WindowStyles.WS_VISIBLE |
+                                                               WindowStyles.WS_VSCROLL |
+                                                               WindowStyles.WS_HSCROLL );
+                                       pars.ExStyle = (int) (  WindowExStyles.WS_EX_CLIENTEDGE );
+
+                                       pars.Parent = Parent.Handle;
+                                       CLIENTCREATESTRUCT cs = new CLIENTCREATESTRUCT();
+                                       cs.hWindowMenu = IntPtr.Zero;
+                                       cs.idFirstChild = 100;
+
+                                       pars.Param = cs;
+                                       
+                                       return pars;
+                               }
+                       }
+                       public void DestroyControl ( ) {
+                               DestroyHandle ( );
+                       }
+               }
+
+               MdiClient mdiClientWnd;
+               Form      mdiParent;
+               Control   dialog_owner;
+               bool      modal;
+               bool      exitModalLoop;
+               Size      autoScaleBaseSize;
+               bool      keyPreview;
+               bool      showInTaskbar;
+               bool      topMost;
+               SizeGripStyle sizeGripStyle;
+               FormStartPosition formStartPosition;
+               FormWindowState   formWindowState;
+               IButtonControl    acceptButton;
+               IButtonControl    cancelButton;
+
+               public Form () : base ()
+               {
+                       opacity = 1.00;
+                       TopLevel = true;
+                       modal    = false;
+                       dialogResult = DialogResult.None;
+                       autoScale = true;
+                       formBorderStyle = FormBorderStyle.Sizable;
+                       sizeGripStyle = SizeGripStyle.Auto;
+                       maximizeBox = true;
+                       minimizeBox = true;
+                       controlBox  = true;
+                       keyPreview  = false;
+                       showInTaskbar = true;
+                       topMost = false;
+                       helpButton = false;
+                       maximumSize = Size.Empty;
+                       minimumSize = Size.Empty;
+                       formStartPosition = FormStartPosition.WindowsDefaultLocation;
+                       visible = false;
+                       formWindowState = FormWindowState.Normal;
+                       acceptButton = null;
+                       cancelButton = null;
+               }
+               
+               static Form ()
+               {
+
+               }
+               
+               //  --- Public Properties
+               //
+               [MonoTODO]
+               public IButtonControl AcceptButton {
+                       get { return acceptButton; }
+                       set { 
+                               acceptButton = value;
+                       }
+               }
+    
+               [MonoTODO]
+               public static Form ActiveForm {
+                       get {
+                               Control control = Control.FromChildHandle ( Win32.GetActiveWindow ( ) );
+                               if ( control != null && ! ( control is Form ) )
+                                       control = control.getParentForm ( );
+                               return control as Form;
+                       }
+               }
+    
+               [MonoTODO]
+               public Form ActiveMdiChild {
+                       get {
+                               throw new NotImplementedException ();
+                       }
+               }
+    
+               [MonoTODO]
+               public bool AutoScale {
+                       get { return autoScale;  }
+                       set { autoScale = value; }
+               }
+
+               [MonoTODO]
+               public virtual Size AutoScaleBaseSize {
+                       get {
+                               return autoScaleBaseSize;
+                       }
+                       set {
+                               autoScaleBaseSize = value;
+                       }
+               }
+    
+               public override bool AutoScroll {
+                       get {
+                               return base.AutoScroll;
+                       }
+                       set {
+                               base.AutoScroll = value;
+                       }
+               }
+    
+               public override Color BackColor {
+                       get {
+                               return base.BackColor;
+                       }
+                       set {
+                               base.BackColor = value;
+                       }
+               }
+    
+               [MonoTODO]
+               public IButtonControl CancelButton {
+                       get { return cancelButton;  }
+                       set { 
+                               cancelButton = value;
+                       }
+               }
+    
+               [MonoTODO]
+               public new Size ClientSize {
+                       get {
+                               return base.ClientSize;
+                       }
+                       set {
+                               base.ClientSize = value;
+                       }
+               }
+    
+               public bool ControlBox {
+                       get { return controlBox; }
+                       set {
+                               int oldStyle = controlBox ? (int) WindowStyles.WS_SYSMENU : 0;
+                               controlBox = value;
+                               if ( IsHandleCreated ) {
+                                       int newStyle = controlBox ? (int) WindowStyles.WS_SYSMENU : 0;
+                                       Win32.UpdateWindowStyle ( Handle, oldStyle, newStyle );
+                               }
+                       }
+               }
+    
+               [MonoTODO]
+               public Rectangle DesktopBounds {
+                       get {
+                               throw new NotImplementedException ();
+                       }
+                       set {
+                                       //FIXME:
+                               }
+               }
+    
+               [MonoTODO]
+               public Point DesktopLocation {
+                       get {
+                               throw new NotImplementedException ();
+                       }
+                       set {
+                               SetDesktopLocation ( value.X, value.Y );
+                       }
+               }
+    
+                       //Compact Framework
+               [MonoTODO]
+               public DialogResult DialogResult {
+                       get {
+                               return dialogResult;
+                       }
+                       set {
+                               if ( !Enum.IsDefined ( typeof(DialogResult), value ) )
+                                       throw new InvalidEnumArgumentException( "DialogResult",
+                                               (int)value,
+                                               typeof(DialogResult));
+
+                               dialogResult = value;
+                               if ( Modal && dialogResult != DialogResult.None ) {
+                                       Application.exitModalLoop ( this );
+                               }
+                       }
+               }
+    
+               public FormBorderStyle FormBorderStyle {
+                       get {   return formBorderStyle; }
+                       set {
+                               if ( formBorderStyle == value )
+                                       return;
+
+                               if ( !Enum.IsDefined ( typeof( FormBorderStyle ), value ) )
+                                       throw new InvalidEnumArgumentException( "FormBorderStyle",
+                                               ( int )value,
+                                               typeof( FormBorderStyle ) );
+
+                               int oldBaseStyle = 0;
+                               int oldExStyle = 0;
+                               getFrameStyle ( formBorderStyle, ref oldBaseStyle, ref oldExStyle );
+
+                               formBorderStyle = value;
+
+                               int newBaseStyle = 0;
+                               int newExStyle = 0;
+                               getFrameStyle ( formBorderStyle, ref newBaseStyle, ref newExStyle );
+                               
+                               ClientSize = ClientSize; // recalculate size of client area
+
+                               if ( IsHandleCreated ) {
+                                       Win32.UpdateWindowStyle ( Handle, oldBaseStyle, newBaseStyle );
+                                       Win32.UpdateWindowExStyle ( Handle, oldExStyle, newExStyle );
+                               }
+                       }
+               }
+    
+
+               public bool HelpButton {
+                       get { return helpButton; }
+                       set {
+                               int oldExStyle = helpButton ? (int) WindowExStyles.WS_EX_CONTEXTHELP : 0;
+                               helpButton = value;
+                               if ( IsHandleCreated ) {
+                                       int newExStyle = 0;
+                                       if ( helpButton && !MinimizeBox && !MaximizeBox )
+                                               newExStyle = (int) WindowExStyles.WS_EX_CONTEXTHELP;
+                                       Win32.UpdateWindowExStyle ( Handle, oldExStyle, newExStyle );
+                               }
+
+                       }
+               }
+    
+                       //Compact Framework
+                       //[MonoTODO]
+               public Icon Icon {
+                        get {
+                                throw new NotImplementedException ();
+                        }
+                        set {
+                                        //FIXME:
+                                }
+               }
+
+               public bool IsMdiChild {
+                       get {   return mdiParent != null; }
+               }
+
+               public bool KeyPreview {
+                       get { return keyPreview;  }
+                       set { keyPreview = value; }
+               }
+    
+               public bool MaximizeBox {
+                       get { return maximizeBox; }
+                       set {
+                               int oldStyle = maximizeBox ? (int) WindowStyles.WS_MAXIMIZEBOX : 0;
+                               maximizeBox = value;
+                               if ( IsHandleCreated ) {
+                                       int newStyle = maximizeBox ? (int) WindowStyles.WS_MAXIMIZEBOX : 0;
+                                       Win32.UpdateWindowStyle ( Handle, oldStyle, newStyle );
+                                       // changing this property may affect the visibility of help button
+                                       HelpButton = HelpButton;
+                               }
+                       }
+               }
+    
+               [MonoTODO]
+               public Size MaximumSize {
+                       get { return maximumSize; }
+                       set {
+                               if ( value.Width < 0 || value.Height < 0 )
+                                       throw new ArgumentOutOfRangeException( "value" );
+
+                               if ( maximumSize != value ) {
+                                       maximumSize = value;
+                                       
+                                       if ( minimumSize != Size.Empty ) {
+                                               if ( maximumSize.Width < minimumSize.Width )
+                                                       minimumSize.Width = maximumSize.Width;
+                                               if ( maximumSize.Height < minimumSize.Height )
+                                                       minimumSize.Height = maximumSize.Height;
+                                       }
+
+                                       Size = Size;
+                                       OnMaximumSizeChanged ( EventArgs.Empty );
+                               }
+                       }
+               }
+    
+               [MonoTODO]
+               public Form[] MdiChildren {
+                       get {
+                               Form[] forms = new Form[0];
+                               return forms;
+                       }
+               }
+    
+               [MonoTODO]
+               public Form MdiParent {
+                       get {
+                               return mdiParent;
+                       }
+                       set {
+                               if ( !value.IsMdiContainer || ( value.IsMdiContainer && value.IsMdiChild ) )
+                                       throw new Exception( );
+
+                               mdiParent = value;
+                               mdiParent.MdiClientControl.Controls.Add ( this );
+                               
+                               if ( mdiParent.IsHandleCreated )
+                                       CreateControl ( );
+                       }
+               }
+    
+                       //Compact Framework
+                       //[MonoTODO]
+                               private MainMenu mainMenu_ = null;
+
+                               private void assignMenu()
+                               {
+                                       if ( mainMenu_ != null )
+                                               mainMenu_.setForm ( this );
+
+                                       if( IsHandleCreated ) {
+                                       // FIXME: If Form's window has no style for menu,  probably, better to add it
+                                       // if menu have to be removed, remove the style.
+                                       // Attention to the repainting.
+                                               if( mainMenu_ != null) {
+//                                                     //long myStyle = Win32.GetWindowLongA( Handle, Win32.GWL_STYLE);
+//                                                     //myStyle |= (long)Win32.WS_OVERLAPPEDWINDOW;
+//                                                     //Win32.SetWindowLongA( Handle, Win32.GWL_STYLE, myStyle);
+                                                       int res = Win32.SetMenu( Handle, mainMenu_.Handle);
+                                                       Console.WriteLine ("Form.assignMenu. result {0}", res);
+                                               }
+                                               else {
+                                                       Win32.SetMenu( Handle, IntPtr.Zero);
+                                               }
+                                       }
+                               }
+
+               public MainMenu Menu {
+                       get {
+                               return mainMenu_;
+                       }
+                       set {
+                               mainMenu_ = value;
+                               assignMenu();
+                               // update size of the form                              
+                               ClientSize = ClientSize;
+                       }
+               }
+
+               //[MonoTODO]
+               //public MainMenu MergedMenu {
+               //      get {
+               //              throw new NotImplementedException ();
+               //      }
+               //}
+    
+               public bool MinimizeBox {
+                       get { return minimizeBox; }
+                       set {
+                               int oldStyle = minimizeBox ? (int) WindowStyles.WS_MINIMIZEBOX : 0;
+                               minimizeBox = value;
+                               if ( IsHandleCreated ) {
+                                       int newStyle = minimizeBox ? (int) WindowStyles.WS_MINIMIZEBOX : 0;
+                                       Win32.UpdateWindowStyle ( Handle, oldStyle, newStyle );
+                                       // changing this property may affect the visibility of help button
+                                       HelpButton = HelpButton;
+                               }
+                       }
+               }
+    
+               [MonoTODO]
+               public Size MinimumSize {
+                       get { return minimumSize; }
+                       set {
+                               if ( value.Width < 0 || value.Height < 0 )
+                                       throw new ArgumentOutOfRangeException( "value" );
+
+                               if ( minimumSize != value ) {
+                                       minimumSize = value;
+
+                                       if ( maximumSize != Size.Empty ) {
+                                               if ( minimumSize.Width > maximumSize.Width )
+                                                       maximumSize.Width = minimumSize.Width;
+                                               if ( minimumSize.Height > maximumSize.Height )
+                                                       maximumSize.Height = minimumSize.Height;
+                                       }
+
+                                       Size = Size;
+                                       OnMinimumSizeChanged ( EventArgs.Empty );
+                               }
+                       }
+               }
+    
+               public bool Modal {
+                       get {   return modal;   }
+               }
+    
+               [MonoTODO]
+               public double Opacity {
+                       get {
+                               return opacity;
+                       }
+                       set {
+                               opacity = value;
+                       }
+               }
+
+               [MonoTODO]
+               public bool IsMdiContainer {
+                       get {   return mdiClientWnd != null; }
+                       set {
+                               if ( value )
+                                       createMdiClient ( );
+                               else
+                                       destroyMdiClient ( );
+                       }
+               }
+
+               [MonoTODO]
+               public Form[] OwnedForms {
+                       get {
+                               throw new NotImplementedException ();
+                       }
+               }
+    
+               [MonoTODO]
+               public Form Owner {
+                       get {
+                               throw new NotImplementedException ();
+                       }
+                       set {
+                                       //FIXME:
+                               }
+               }
+    
+               [MonoTODO]
+               public bool ShowInTaskbar {
+                       get { return showInTaskbar; }
+                       set {
+                               if ( showInTaskbar != value ) {
+                                       showInTaskbar = value;
+                                       RecreateHandle ( );
+                                       Visible = Visible;
+                               }
+                       }
+               }
+    
+    
+               public override ISite Site {
+                       get {
+                               return base.Site;
+                       }
+                       set {
+                               base.Site = value;
+                       }
+               }
+    
+               [MonoTODO]
+               public SizeGripStyle SizeGripStyle {
+                       get { return sizeGripStyle; }
+                       set {
+                               if ( !Enum.IsDefined ( typeof( SizeGripStyle ), value ) )
+                                       throw new InvalidEnumArgumentException( "SizeGripStyle",
+                                               (int)value,
+                                               typeof( SizeGripStyle ) );
+
+                               sizeGripStyle = value;
+                       }
+               }
+    
+               public FormStartPosition StartPosition {
+                       get { return formStartPosition; }
+                       set {
+                               if ( !Enum.IsDefined ( typeof( FormStartPosition ), value ) )
+                                       throw new InvalidEnumArgumentException( "StartPosition",
+                                               (int)value,
+                                               typeof( FormStartPosition ) );
+
+                               formStartPosition = value;
+                       }
+               }
+    
+               [MonoTODO]
+               public bool TopLevel {
+                       get { return GetTopLevel ( );  }
+                       set { SetTopLevel ( value );   }
+               }
+    
+               public bool TopMost {
+                       get { return topMost; }
+                       set {
+                               topMost = value;
+                               if ( IsHandleCreated )
+                                       Win32.SetWindowPos ( Handle, topMost ? SetWindowPosZOrder.HWND_TOPMOST : SetWindowPosZOrder.HWND_NOTOPMOST,
+                                               0, 0, 0, 0, SetWindowPosFlags.SWP_NOSIZE | SetWindowPosFlags.SWP_NOMOVE );
+                       }
+               }
+    
+               [MonoTODO]
+               public Color TransparencyKey {
+                       get {
+                               throw new NotImplementedException ();
+                       }
+                       set {
+                                       //FIXME:
+                               }
+               }
+    
+    
+               //Compact Framework
+               [MonoTODO]
+               public FormWindowState WindowState {
+                       get { return formWindowState; }
+                       set {
+                               if ( !Enum.IsDefined ( typeof( FormWindowState ), value ) )
+                                       throw new InvalidEnumArgumentException( "WindowState",
+                                               (int)value,
+                                               typeof( FormWindowState ) );
+
+                               formWindowState = value;
+                       }
+               }
+    
+               
+               //  --- Public Methods
+               public void Activate ()
+               {
+                       Win32.SetActiveWindow (Handle);
+               }
+    
+               [MonoTODO]
+               public void AddOwnedForm (Form ownedForm)
+               {
+                               //FIXME:
+                       }
+    
+                       //Compact Framework
+               public void Close ()
+               {
+                       //Win32.DestroyWindow (Handle);
+                       if ( IsHandleCreated )
+                               Win32.PostMessage ( Handle, Msg.WM_CLOSE, 0, 0 );
+               }
+    
+               public void LayoutMdi (MdiLayout value)
+               {
+                       if ( IsMdiContainer && mdiClientWnd.IsHandleCreated ) {
+                               int mes = 0;
+                               int wp  = 0;
+
+                               switch ( value ) {
+                               case MdiLayout.Cascade:
+                                       mes = (int)Msg.WM_MDICASCADE;
+                               break;
+                               case MdiLayout.ArrangeIcons:
+                                       mes = (int)Msg.WM_MDIICONARRANGE;
+                               break;
+                               case MdiLayout.TileHorizontal:
+                                       mes = (int)Msg.WM_MDITILE;
+                                       wp = 1;
+                               break;
+                               case MdiLayout.TileVertical:
+                                       mes = (int)Msg.WM_MDITILE;
+                               break;
+                               }
+                               
+                               if ( mes != 0 )
+                                       Win32.SendMessage ( mdiClientWnd.Handle, mes, wp, 0 );
+                       }
+               }
+    
+               [MonoTODO]
+               public void RemoveOwnedForm (Form ownedForm)
+               {
+                               //FIXME:
+                       }
+    
+     
+               public void SetDesktopLocation (int x, int y)
+               {
+                       Win32.SetWindowPos ((IntPtr) Handle, SetWindowPosZOrder.HWND_TOPMOST, 
+                                           x, y, 0, 0, 
+                                           SetWindowPosFlags.SWP_NOSIZE | 
+                                           SetWindowPosFlags.SWP_NOZORDER);
+               }
+    
+    
+               [MonoTODO]
+               public DialogResult ShowDialog ()
+               {
+                       Control owner = Control.getOwnerWindow ( this );
+                       Control oldOwner = dlgOwner;
+                       dlgOwner = owner;
+
+                        // needs to be recreated because ownership can't be changed
+                       if ( IsHandleCreated ) {
+                               if ( oldOwner != owner )
+                                       RecreateHandle();
+                       }
+                       else
+                               CreateControl ( );
+
+                       if ( owner != null )
+                               owner.Enabled = false;
+
+                       Show ( );
+                       
+                       modal = true;
+                       Application.enterModalLoop ( this );
+                       modal = false;
+
+                       if ( owner != null ) {
+                               owner.Enabled = true;
+                               Win32.SetFocus ( owner.Handle );
+                       }
+                       Hide ( );
+
+                       return DialogResult;
+               }
+    
+               public override string ToString ()
+               {
+                       return GetType( ).FullName.ToString( ) + ", Text: " + Text;
+               }
+    
+               //  --- Public Events
+               
+               public event EventHandler Activated;
+               
+               public event EventHandler Closed;
+               public event CancelEventHandler Closing;
+                
+                       //Compact Framework
+               // CancelEventHandler not yet implemented/stubbed
+               //public event CancelEventHandler Closing;
+               
+               public event EventHandler Deactivate;
+               public event InputLanguageChangedEventHandler InputLanguageChanged;
+               public event InputLanguageChangingEventHandler InputLanguageChanging;
+
+                       //Compact Framework
+               public event EventHandler  Load;
+               
+               public event EventHandler  MaximizedBoundsChanged;
+               public event EventHandler  MaximumSizeChanged;
+               public event EventHandler  MdiChildActivate;
+               public event EventHandler  MenuComplete;
+               public event EventHandler  MenuStart;
+               public event EventHandler  MinimumSizeChanged;
+    
+               
+               //  --- Protected Properties
+               
+               protected override CreateParams CreateParams {
+                       get {
+                               CreateParams pars = base.CreateParams;
+                       
+                               int baseStyle = 0;
+                               int exStyle = 0;
+
+                               getFrameStyle ( FormBorderStyle , ref baseStyle, ref exStyle );
+
+                               pars.Style   = baseStyle;
+                               pars.ExStyle = exStyle;
+
+                               if ( IsMdiChild ) {
+                                       pars.Style |= (int)( WindowStyles.WS_CHILD | WindowStyles.WS_VISIBLE );
+                                       pars.ExStyle |= (int)WindowExStyles.WS_EX_MDICHILD;
+                               }
+                               else {
+                                       pars.Style |= (int)( WindowStyles.WS_CLIPSIBLINGS  |
+                                                            WindowStyles.WS_CLIPCHILDREN );
+                               }
+
+                               if ( TopLevel && Parent == null ) 
+                                       pars.Parent = IntPtr.Zero;
+
+                               if ( ShowInTaskbar )
+                                       pars.ExStyle |= (int) WindowExStyles.WS_EX_APPWINDOW;
+                               else {
+                                       pars.ExStyle &= ~(int) WindowExStyles.WS_EX_APPWINDOW;
+                                       // should be child of the hidden window
+                                       pars.Parent = Control.ParkingWindowHandle;
+                               }
+                       
+                               if ( ControlBox )       
+                                       pars.Style |= (int) WindowStyles.WS_SYSMENU;
+                               else
+                                       pars.Style &= ~(int) WindowStyles.WS_SYSMENU;
+
+                               if ( MaximizeBox )      
+                                       pars.Style |= (int) WindowStyles.WS_MAXIMIZEBOX;
+                               else
+                                       pars.Style &= ~(int) WindowStyles.WS_MAXIMIZEBOX;
+
+                               if ( MinimizeBox )      
+                                       pars.Style |= (int) WindowStyles.WS_MINIMIZEBOX;
+                               else
+                                       pars.Style &= ~(int) WindowStyles.WS_MINIMIZEBOX;
+
+                               if ( HelpButton && !MinimizeBox && !MaximizeBox )       
+                                       pars.ExStyle |= (int) WindowExStyles.WS_EX_CONTEXTHELP;
+                               else
+                                       pars.ExStyle &= ~(int) WindowExStyles.WS_EX_CONTEXTHELP;
+
+                               if ( TopMost )
+                                       pars.ExStyle |= (int) WindowExStyles.WS_EX_TOPMOST;
+
+                               // this property is used for modal dialogs
+                               if ( dlgOwner != null )
+                                       pars.Parent = dlgOwner.Handle;
+
+                               if ( !RecreatingHandle ) {
+                                       // don't change location of the form when it is being recreated
+                                       getStartPosition ( ref pars );
+                               }
+                               return pars;
+                       }
+               }
+    
+               protected override bool MenuPresent {
+                       get { return mainMenu_ != null; }
+               }
+
+               protected override ImeMode DefaultImeMode {
+                       get {
+                               return base.DefaultImeMode;
+                       }
+               }
+    
+               protected override Size DefaultSize {
+                               get {
+                                       return new Size(300,300);
+                               }
+                       }
+    
+               [MonoTODO]
+                       public new Size Size {
+                               get {
+                                       return base.Size;
+                               }
+                               set {
+                                       base.Size = value;
+                               }
+                       }
+                       [MonoTODO]
+               protected Rectangle MaximizedBounds {
+                       get {
+                               throw new NotImplementedException ();
+                       }
+                       set {
+                                       //FIXME:
+                               }
+               }
+    
+               
+               //  --- Protected Methods
+               
+               protected override void AdjustFormScrollbars (
+                       bool displayScrollbars)
+               {
+                       base.AdjustFormScrollbars (displayScrollbars);
+               }
+    
+               protected override Control.ControlCollection 
+               CreateControlsInstance ()
+               {
+                       return base.CreateControlsInstance ();
+               }
+    
+               protected override void CreateHandle ()
+               {
+                       base.CreateHandle ();
+               }
+    
+               protected override void DefWndProc (ref Message m)
+               {
+                       if ( IsMdiChild )
+                               window.DefMDIChildProc ( ref m );
+                       else if ( IsMdiContainer && mdiClientWnd.IsHandleCreated ) {
+                               if ( m.Msg != Msg.WM_SIZE )
+                                       window.DefFrameProc ( ref m, mdiClientWnd );
+                       }
+                       else
+                               window.DefWndProc (ref m);
+               }
+
+                       //Compact Framework
+               protected virtual void OnClosed (EventArgs e)
+               {
+                       if (Closed != null)
+                               Closed (this, e);
+               }
+    
+                       //Compact Framework
+               protected virtual void  OnClosing(CancelEventArgs e)
+               {
+                       if ( Closing != null )
+                               Closing ( this, e);
+
+                       if ( Modal ) {
+                               e.Cancel = true; // don't destroy modal form
+                               DialogResult = DialogResult.Cancel;
+                       }
+               }
+    
+               protected override void OnCreateControl ()
+               {
+                       OnLoad ( EventArgs.Empty );
+                       base.OnCreateControl ();
+                       Control c = getNextFocusedControl ( this, true );
+                       if ( c != null )
+                               c.Focus ( );
+               }
+    
+               protected override void OnFontChanged (EventArgs e)
+               {
+                       base.OnFontChanged (e);
+               }
+    
+               protected override void OnHandleCreated (EventArgs e)
+               {
+                       base.OnHandleCreated (e);
+                       if ( IsMdiChild ) 
+                               activateMdiChild ( );
+                       Rectangle bnds = Bounds;
+                       assignMenu();
+               }
+    
+               protected override void OnHandleDestroyed (EventArgs e)
+               {
+                       base.OnHandleDestroyed (e);
+               }
+    
+               protected virtual void OnInputLanguageChanged (
+                       InputLanguageChangedEventArgs e)
+               {
+                       if (InputLanguageChanged != null)
+                               InputLanguageChanged (this, e);
+               }
+    
+               protected virtual void OnInputLanguagedChanging (
+                       InputLanguageChangingEventArgs e)
+               {
+                       if (InputLanguageChanging != null)
+                               InputLanguageChanging (this, e);
+               }
+    
+                       //Compact Framework
+               protected virtual void OnLoad (EventArgs e)
+               {
+                       if (Load != null)
+                               Load (this, e);
+               }
+    
+               protected virtual void OnMaximizedBoundsChanged (EventArgs e)
+               {
+                       if (MaximizedBoundsChanged != null)
+                               MaximizedBoundsChanged (this, e);
+               }
+    
+               protected virtual void OnMaximumSizeChanged (EventArgs e)
+               {
+                       if (MaximumSizeChanged != null)
+                               MaximumSizeChanged (this, e);
+               }
+    
+               protected virtual void OnMdiChildActivate (EventArgs e)
+               {
+                       if (MdiChildActivate != null)
+                               MdiChildActivate (this, e);
+               }
+    
+               protected virtual void OnMenuComplete (EventArgs e)
+               {
+                       if (MenuComplete != null)
+                               MenuComplete (this, e);
+               }
+    
+               protected virtual void OnMenuStart (EventArgs e)
+               {
+                       if (MenuStart != null)
+                               MenuStart (this, e);
+               }
+    
+               protected virtual void OnMinimumSizeChanged (EventArgs e)
+               {
+                       if ( MinimumSizeChanged != null )
+                               MinimumSizeChanged ( this, e );
+               }
+    
+                       //Compact Framework
+               protected override void  OnPaint (PaintEventArgs e)
+               {
+                       base.OnPaint (e);
+               }
+    
+                       //Compact Framework
+               protected override void  OnResize (EventArgs e)
+               {
+                       base.OnResize (e);
+//                     resizeMdiClient ();
+               }
+    
+               protected override void  OnStyleChanged (EventArgs e)
+               {
+                       base.OnStyleChanged (e);
+               }
+    
+                       //Compact Framework
+               protected override void  OnTextChanged (EventArgs e)
+               {
+                       base.OnTextChanged (e);
+               }
+    
+               protected override void  OnVisibleChanged (EventArgs e)
+               {
+                       base.OnVisibleChanged (e);
+               }
+
+               protected virtual IntPtr OnMenuCommand (uint id)
+               {
+                               IntPtr result = (IntPtr)1;
+                               System.Console.WriteLine("Form on command {0}", id);
+                               if(Menu != null) {
+                                       MenuItem mi = Menu.GetMenuItemByID( id);
+                                       if( mi != null) {
+                                               mi.PerformClick();
+                                               result = IntPtr.Zero;
+                                       }
+                               }
+                               return result;
+               }
+
+                       protected override void OnWmCommand (ref Message m)
+                       {
+                               int wNotifyCode = (int)m.HiWordWParam;
+                               int wID = (int)m.LoWordWParam;
+
+                               if( m.LParam.ToInt32() == 0) {
+                                       if( wNotifyCode == 0) {
+                                               // Menu
+                                               m.Result = OnMenuCommand( (uint)wID);
+                                       }
+                                       else if( wNotifyCode == 1) {
+                                               // Accelerator
+                                               m.Result = (IntPtr)1;
+                                       }
+                                       else {
+                                               // just pass it to DefWindowProc
+                                               m.Result = (IntPtr)1;
+                                       }
+                               }
+                               else {
+                                       if ( IsMdiContainer && m.LParam != IntPtr.Zero ) {
+                                               // we need to pass unhandled commands
+                                               // to DefFrameProc
+                                               m.Result = (IntPtr)1;
+                                               return;
+                                       }
+                                       base.OnWmCommand(ref m);
+                               }
+                       }
+
+                       protected override bool ProcessCmdKey ( ref Message msg, Keys keyData)
+               {
+                       return base.ProcessCmdKey (ref msg, keyData);
+               }
+    
+               protected override bool ProcessDialogKey (Keys keyData)
+               {
+                       if ( keyData == Keys.Enter && AcceptButton != null ) {
+                               AcceptButton.PerformClick ( );
+                               return true;
+                       }
+                       if ( keyData == Keys.Escape && CancelButton != null ) {
+                               CancelButton.PerformClick ( );
+                               return true;
+                       }
+                       return base.ProcessDialogKey (keyData);
+               }
+    
+               protected override bool ProcessKeyPreview (ref Message m)
+               {
+                       if ( KeyPreview )
+                               return ProcessKeyEventArgs ( ref m ); 
+
+                       return false;
+               }
+
+               protected override bool ProcessTabKey ( bool forward )
+               {
+                       Control newFocus = getNextFocusedControl ( this, forward );
+                       if ( newFocus != null ) {
+                               return newFocus.Focus ( );
+                       }
+                       return base.ProcessTabKey ( forward );
+               }
+    
+               protected override void ScaleCore (float x, float y)
+               {
+                       ClientSize = new Size ( (int) ( ClientSize.Width * x ), (int) ( ClientSize.Height * y) );
+               }
+    
+               protected override void SetBoundsCore ( int x, int y,  int width, int height, BoundsSpecified specified )
+               {
+                       if ( MaximumSize != Size.Empty ) {
+                               if ( width > MaximumSize.Width )
+                                       width = MaximumSize.Width;
+                               if ( height > MaximumSize.Height )
+                                       height = MaximumSize.Height;
+                       }
+                       if ( MinimumSize != Size.Empty ) {
+                               if ( width < MinimumSize.Width )
+                                       width = MinimumSize.Width;
+                               if ( height < MinimumSize.Height )
+                                       height = MinimumSize.Height;
+                       }
+
+                       base.SetBoundsCore (x, y, width, height, specified);
+               }
+    
+               protected override void SetClientSizeCore (int x, int y)
+               {
+                       base.SetClientSizeCore (x, y);
+               }
+    
+               protected override void SetVisibleCore (bool value)
+               {
+                       base.SetVisibleCore (value);
+               }
+
+               protected override void WndProc (ref Message m)
+               {
+                       switch (m.Msg) {
+                       case Msg.WM_CLOSE:
+                               CancelEventArgs args = new CancelEventArgs( false );
+                               OnClosing( args );
+                               if ( !args.Cancel ) {
+                                       OnClosed ( EventArgs.Empty );
+                                       base.WndProc ( ref m );
+                               }
+                               break;
+                               //case ?:
+                               //OnCreateControl()
+                               //break;
+                       case Msg.WM_FONTCHANGE:
+                               EventArgs fontChangedArgs = new EventArgs();
+                               OnFontChanged (fontChangedArgs);
+                               break;
+                       case Msg.WM_CREATE:
+                               EventArgs handleCreatedArgs = new EventArgs(); 
+                               OnHandleCreated (handleCreatedArgs);
+                               break;
+                       case Msg.WM_DESTROY:
+                               EventArgs destroyArgs = new EventArgs();
+                               OnHandleDestroyed (destroyArgs);
+                               break;
+                       case Msg.WM_INPUTLANGCHANGE:
+                               //InputLanguageChangedEventArgs ilChangedArgs =
+                               //      new InputLanguageChangedEventArgs();
+                               //OnInputLanguageChanged (ilChangedArgs);
+                               break;
+                       case Msg.WM_INPUTLANGCHANGEREQUEST:
+                               //InputLanguageChangingEventArgs ilChangingArgs =
+                               //      new InputLanguageChangingEventArgs();
+                               //OnInputLanguagedChanging (ilChangingArgs);
+                               break;
+                               /*
+                                 case Win32.WM_SHOWWINDOW:
+                                 EventArgs e;
+                                 OnLoad (e);
+                                 break;
+                               */
+                               // case ?:
+                               // OnMaximizedBoundsChanged(EventArgs e)
+                               // break;
+                               // case ?:
+                               // OnMaximumSizedChanged(EventArgs e)
+                               //break;
+                       case Msg.WM_MDIACTIVATE:
+                               EventArgs mdiActivateArgs = new EventArgs();
+                               OnMdiChildActivate (mdiActivateArgs);
+                               base.WndProc ( ref m );
+                               break;
+                       case Msg.WM_EXITMENULOOP:
+                               EventArgs menuCompleteArgs = new EventArgs();
+                               OnMenuComplete (menuCompleteArgs);
+                               break;
+                       case Msg.WM_ENTERMENULOOP:
+                               EventArgs enterMenuLoopArgs = new EventArgs();
+                               OnMenuStart (enterMenuLoopArgs);
+                               break;
+                       case Msg.WM_WINDOWPOSCHANGING:
+                               if ( StartPosition == FormStartPosition.WindowsDefaultBounds && MaximumSize != Size.Empty || MinimumSize != Size.Empty) {
+                                       WINDOWPOS winpos = (WINDOWPOS) Marshal.PtrToStructure ( m.LParam, typeof ( WINDOWPOS ) );
+                                       if ( ( winpos.flags & (uint)SetWindowPosFlags.SWP_SHOWWINDOW ) == (uint)SetWindowPosFlags.SWP_SHOWWINDOW ) {
+
+                                               RECT rect = new RECT ( );
+                                               Win32.GetWindowRect ( Handle, ref rect );
+                                               
+                                               winpos.cx  = rect.right  - rect.left;
+                                               winpos.cy  = rect.bottom - rect.top;
+
+                                               if ( MaximumSize != Size.Empty ) {
+                                                       if ( winpos.cx > MaximumSize.Width )
+                                                               winpos.cx = MaximumSize.Width;
+                                                       if ( winpos.cy > MaximumSize.Height )
+                                                               winpos.cy = MaximumSize.Height;
+                                               }
+
+                                               if ( MinimumSize != Size.Empty ) {
+                                                       if ( winpos.cx  < MinimumSize.Width )
+                                                               winpos.cx = MinimumSize.Width;
+                                                       if ( winpos.cy < MinimumSize.Height )
+                                                               winpos.cy = MinimumSize.Height;
+                                               }
+
+                                               winpos.flags &= ~ (uint)SetWindowPosFlags.SWP_NOSIZE;
+                                               winpos.flags |=   (uint)SetWindowPosFlags.SWP_NOSENDCHANGING;
+
+                                               Marshal.StructureToPtr ( winpos, m.LParam, false );
+                                       }
+                               }
+                               base.WndProc ( ref m );
+                       break;
+                       case Msg.WM_GETMINMAXINFO:
+                               MINMAXINFO minmax = (MINMAXINFO) Marshal.PtrToStructure ( m.LParam, typeof ( MINMAXINFO ) );
+                               if ( MaximumSize != Size.Empty ) {
+                                       minmax.ptMaxTrackSize.x = MaximumSize.Width;
+                                       minmax.ptMaxTrackSize.y = MaximumSize.Height;
+                               }
+                               if ( MinimumSize != Size.Empty ) {
+                                       minmax.ptMinTrackSize.x = MinimumSize.Width;
+                                       minmax.ptMinTrackSize.y = MinimumSize.Height;
+                               }
+                               Marshal.StructureToPtr ( minmax, m.LParam, false );
+                       break;
+                               // case ?:
+                               // OnMinimumSizeChanged(EventArgs e)
+                               // break;
+/*
+                               case Msg.WM_PAINT: {
+                                       Rectangle rect = new Rectangle();
+                                       PaintEventArgs paintArgs = new PaintEventArgs(CreateGraphics(), rect);
+                                       OnPaint (paintArgs);
+                                       paintArgs.Dispose();
+                                       }
+                                               break;
+                       case Msg.WM_SIZE:
+                               EventArgs resizeArgs = new EventArgs();
+                               OnResize (resizeArgs);
+                               break;
+                               //case ?:
+                               //OnStyleChanged(EventArgs e)
+                               //break;
+                       case Msg.WM_SETTEXT:
+                               EventArgs textChangedArgs = new EventArgs();
+                               OnTextChanged (textChangedArgs);
+                               break;
+                       case Msg.WM_SHOWWINDOW:
+                               EventArgs visibleChangedArgs = new EventArgs();
+                               OnVisibleChanged (visibleChangedArgs);
+                               break;
+*/                                     
+                               case Msg.WM_INITMENU:
+                                       OnWmInitMenu (ref m);
+                                       break;
+                               case Msg.WM_INITMENUPOPUP:
+                                       OnWmInitMenuPopup (ref m);
+                                       break;
+                               case Msg.WM_CTLCOLORLISTBOX:
+                                       Control.ReflectMessage( m.LParam, ref m);
+                                       break;
+                               default:
+                                       base.WndProc (ref m);
+                                       break;    
+                               }
+               }
+               
+                       #region new 11.26.2002 from Alexandre Pigolkine (pigolkine@gmx.de)
+                       protected virtual void OnWmInitMenu (ref Message m) {
+                               Menu mn = System.Windows.Forms.Menu.GetMenuByHandle( m.WParam);
+                               if( mn != null) {
+                                       mn.OnWmInitMenu();
+                               }
+                       }
+
+                       protected virtual void OnWmInitMenuPopup (ref Message m) {
+                               Menu mn = System.Windows.Forms.Menu.GetMenuByHandle( m.WParam);
+                               if( mn != null) {
+                                       mn.OnWmInitMenuPopup();
+                               }
+                       }
+                       #endregion
+                       
+               private void createMdiClient ( ) {
+                       if(  mdiClientWnd == null ) {
+                               mdiClientWnd = new MdiClient ( this );
+                               Controls.Add ( mdiClientWnd );
+                               mdiClientWnd.Dock = DockStyle.Fill;
+                               if ( IsHandleCreated ) {
+                                       mdiClientWnd.CreateControl ( );
+                                       if ( Menu != null ) {
+                                               MenuItem mdiListItem = Menu.MdiListItem;
+                                               if ( mdiListItem != null ) 
+                                                       replaceMdiWindowMenu ( mdiListItem.Handle );
+                                       } 
+                               }
+                       }
+               }
+
+               private void destroyMdiClient ( ) {
+                       if ( mdiClientWnd != null ) {
+                               Controls.Remove ( mdiClientWnd );
+                               mdiClientWnd.DestroyControl ( );
+                               mdiClientWnd = null;
+                       }
+               }
+               private void resizeMdiClient ( ) {
+                       if ( IsMdiContainer && mdiClientWnd.IsHandleCreated ) {
+                               Win32.MoveWindow ( mdiClientWnd.Handle,
+                                       Location.X, Location.Y,
+                                       ClientSize.Width,
+                                       ClientSize.Height, true );
+                       }
+               }
+
+               private void activateMdiChild ( ) {
+                       Win32.SendMessage ( Parent.Handle, Msg.WM_MDIACTIVATE, Handle.ToInt32(), 0 );
+               }
+
+               internal Control MdiClientControl {
+                       get { return this.mdiClientWnd; }
+               }
+
+               internal void replaceMdiWindowMenu ( IntPtr hMenu ) {
+                       Control mdiClient = MdiClientControl;
+                       if ( mdiClient != null && mdiClient.Handle != IntPtr.Zero )
+                               if ( hMenu != IntPtr.Zero )
+                                       Win32.SendMessage ( mdiClient.Handle, Msg.WM_MDISETMENU, 0, hMenu.ToInt32 ( ) );
+                               else
+                                       Win32.SendMessage ( mdiClient.Handle, Msg.WM_MDISETMENU, 1, 0 );
+                                       // this probably won't work on Wine anyway
+                                       // because such behaviour is not impl. there
+
+                       if ( IsHandleCreated )
+                               Win32.DrawMenuBar ( Handle );
+                               
+               }
+
+               internal Control dlgOwner {
+                       get { return dialog_owner; }
+                       set { dialog_owner = value;}
+               }
+
+               internal bool ExitModalLoop {
+                       get { return exitModalLoop; }
+                       set { exitModalLoop = value; }
+               }
+
+               private void getFrameStyle ( FormBorderStyle borderStyle, ref int baseStyle, ref int exStyle )
+               {
+                       baseStyle = 0;
+                       exStyle = 0;
+                       
+                       int sysStyles = getSysStyles ( );
+
+                       switch ( borderStyle ) {
+                       case FormBorderStyle.Fixed3D:
+                               baseStyle = (int) ( WindowStyles.WS_CAPTION ) | sysStyles;
+                               exStyle = (int) ( WindowExStyles.WS_EX_OVERLAPPEDWINDOW );
+                       break;
+                       case FormBorderStyle.FixedDialog:
+                               baseStyle = (int) ( WindowStyles.WS_CAPTION ) | sysStyles;
+                               exStyle = (int) ( WindowExStyles.WS_EX_DLGMODALFRAME |  WindowExStyles.WS_EX_WINDOWEDGE );
+                       break;
+                       case FormBorderStyle.FixedSingle:
+                               baseStyle = (int) ( WindowStyles.WS_CAPTION ) | sysStyles;
+                               exStyle = (int) ( WindowExStyles.WS_EX_WINDOWEDGE );
+                       break;
+                       case FormBorderStyle.FixedToolWindow:
+                               baseStyle = (int) ( WindowStyles.WS_CAPTION ) ;
+                               exStyle = (int) ( WindowExStyles.WS_EX_WINDOWEDGE | WindowExStyles.WS_EX_TOOLWINDOW );
+                       break;
+                       case FormBorderStyle.Sizable:
+                               baseStyle = (int) ( WindowStyles.WS_OVERLAPPEDWINDOW ) | sysStyles;
+                               exStyle = (int) ( WindowExStyles.WS_EX_WINDOWEDGE );
+                       break;
+                       case FormBorderStyle.SizableToolWindow:
+                               baseStyle = (int) ( WindowStyles.WS_OVERLAPPEDWINDOW );
+                               exStyle = (int) ( WindowExStyles.WS_EX_WINDOWEDGE | WindowExStyles.WS_EX_TOOLWINDOW );
+                       break;
+                       }
+               }
+
+               private int getSysStyles ( )
+               {
+                       int sysStyles = 0;
+                       if ( MinimizeBox )
+                               sysStyles  |= (int)( WindowStyles.WS_MINIMIZEBOX );
+                       if ( MaximizeBox )
+                               sysStyles  |= (int)( WindowStyles.WS_MAXIMIZEBOX );
+                       if ( ControlBox )
+                               sysStyles  |= (int)( WindowStyles.WS_SYSMENU );
+                       return sysStyles;
+               }
+
+               private void getStartPosition ( ref CreateParams pars )
+               {
+                       switch ( StartPosition ) {
+                       case FormStartPosition.WindowsDefaultLocation:
+                               pars.X = pars.Y = (int)CreateWindowCoordinates.CW_USEDEFAULT;
+                       break;
+                       case FormStartPosition.WindowsDefaultBounds:
+                               pars.X = pars.Y = pars.Width = pars.Height = (int)CreateWindowCoordinates.CW_USEDEFAULT;
+                       break;
+                       case FormStartPosition.Manual:
+                               // use location and size ( they are set in Control.CreateParams )
+                       break;
+                       case FormStartPosition.CenterScreen:
+                               // FIXME
+                       break;
+                       case FormStartPosition.CenterParent:
+                               // FIXME
+                       break;
+                       }
+               }
+
+               //sub class
+               //System.Windows.Forms.Form.ControlCollection.cs
+               //
+               //Author:
+               //  stubbed out by Daniel Carrera (dcarrera@math.toronto.edu)
+               //
+               // (C) 2002 Ximian, Inc
+               //
+               //
+               // <summary>
+               //      This is only a template.  Nothing is implemented yet.
+               //
+               // </summary>
+               // TODO: implement support classes and derive from 
+               // proper classes
+               // FIXME: use this or the one defined on Control?
+                       public class  ControlCollectionX : 
+                       System.Windows.Forms.Control.ControlCollection 
+                       /*,ICollection*/ {
+    
+                       //  --- Constructor
+                       // base class not defined (yet!)
+                       public ControlCollectionX (Form owner) : base(owner) {
+    
+                       }
+               
+                       //  --- Public Methods
+    
+                       // TODO: see what causes this compile error
+                       public override void Add(Control value) {
+                               base.Add (value);
+                       }
+    
+                       public override bool Equals (object obj) {
+                                       //FIXME:
+                                       return base.Equals(obj);
+                       }
+
+                       public override int GetHashCode () {
+                               //FIXME add our proprities
+                               return base.GetHashCode ();
+                       }
+    
+                       public override void Remove(Control value) {
+                               base.Remove (value);
+                       }
+               } // end of Subclass
+       }
+    }