- //\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
+ }
+ }