2 // System.Windows.Forms.Form
\r
5 // Miguel de Icaza (miguel@ximian.com)
\r
6 // stubbed out by Daniel Carrera (dcarrera@math.toronto.edu)
\r
7 // Dennis Hayes (dennish@raytek.com)
\r
8 // WINELib implementation started by John Sohn (jsohn@columbus.rr.com)
\r
10 // (C) 2002 Ximian, Inc
\r
14 using System.Drawing;
\r
15 using System.ComponentModel;
\r
16 using System.Collections;
\r
18 namespace System.Windows.Forms {
\r
20 public class Form : ContainerControl {
\r
21 DialogResult dialogResult;
\r
25 // Temperary varibles that may be replaced
\r
26 // with win32 functions
\r
29 private bool controlBox;
\r
30 private bool minimizeBox;
\r
31 private bool maximizeBox;
\r
32 private bool helpButton;
\r
35 FormBorderStyle formBorderStyle;
\r
37 // End of temperay varibles
\r
39 public Form () : base ()
\r
42 Left = (int)CreateWindowCoordinates.CW_USEDEFAULT;
\r
43 Top = (int)CreateWindowCoordinates.CW_USEDEFAULT;
\r
53 // --- Public Properties
\r
56 public IButtonControl AcceptButton {
\r
58 throw new NotImplementedException ();
\r
66 public static Form ActiveForm {
\r
68 throw new NotImplementedException ();
\r
73 public Form ActiveMdiChild {
\r
75 throw new NotImplementedException ();
\r
80 public bool AutoScale {
\r
82 throw new NotImplementedException ();
\r
88 internal Size autoscalebasesize; //debug/test only
\r
91 public virtual Size AutoScaleBaseSize {
\r
93 return autoscalebasesize;
\r
96 autoscalebasesize = value;
\r
100 public override bool AutoScroll {
\r
102 return base.AutoScroll;
\r
105 base.AutoScroll = value;
\r
109 public override Color BackColor {
\r
111 return base.BackColor;
\r
114 base.BackColor = value;
\r
119 public IButtonControl CancelButton {
\r
121 throw new NotImplementedException ();
\r
129 public new Size ClientSize {
\r
131 throw new NotImplementedException ();
\r
136 SetClientSize( value, (int)WindowStyles.WS_OVERLAPPEDWINDOW, mainMenu_ != null);
\r
140 //Compact Framework
\r
142 // In .NET this can be changed at any time.
\r
143 // In WIN32 this is fixed when the window is created.
\r
144 // In WIN32 to change this after the window is created,
\r
145 // like in .NET, we must draw the caption bar our self.
\r
146 // In the mean time, just set/return a bool.
\r
147 // This might be the start of the drawing
\r
149 public bool ControlBox {
\r
154 controlBox = value;
\r
160 public Rectangle DesktopBounds {
\r
162 throw new NotImplementedException ();
\r
170 public Point DesktopLocation {
\r
172 throw new NotImplementedException ();
\r
179 //Compact Framework
\r
181 public DialogResult DialogResult {
\r
183 return dialogResult;
\r
186 dialogResult = value;
\r
190 //Compact Framework
\r
192 public FormBorderStyle FormBorderStyle {
\r
194 return formBorderStyle;
\r
197 formBorderStyle = value;
\r
202 public bool HelpButton {
\r
207 helpButton = value;
\r
211 //Compact Framework
\r
215 throw new NotImplementedException ();
\r
223 public bool IsMidiChild {
\r
225 throw new NotImplementedException ();
\r
233 public bool IsMidiContainer {
\r
235 throw new NotImplementedException ();
\r
243 public bool KeyPreview {
\r
245 throw new NotImplementedException ();
\r
252 //Compact Framework
\r
254 public bool MaximizeBox {
\r
256 return maximizeBox;
\r
259 maximizeBox = value;
\r
264 public Size MaximumSize {
\r
266 return maximumSize;
\r
269 maximumSize = value;
\r
274 public Form[] MdiChildren {
\r
276 throw new NotImplementedException ();
\r
284 public Form MdiParent {
\r
286 throw new NotImplementedException ();
\r
293 //Compact Framework
\r
295 private MainMenu mainMenu_ = null;
\r
297 private void assignMenu()
\r
299 if( Handle != IntPtr.Zero ) {
\r
300 // FIXME: If Form's window has no style for menu, probably, better to add it
\r
301 // if menu have to be removed, remove the style.
\r
302 // Attention to the repainting.
\r
303 if( mainMenu_ != null) {
\r
304 // //long myStyle = Win32.GetWindowLongA( Handle, Win32.GWL_STYLE);
\r
305 // //myStyle |= (long)Win32.WS_OVERLAPPEDWINDOW;
\r
306 // //Win32.SetWindowLongA( Handle, Win32.GWL_STYLE, myStyle);
\r
307 int res = Win32.SetMenu( Handle, mainMenu_.Handle);
\r
308 Console.WriteLine ("Form.assignMenu. result {0}", res);
\r
311 Win32.SetMenu( Handle, IntPtr.Zero);
\r
316 public MainMenu Menu {
\r
327 //public MainMenu MergedMenu {
\r
329 // throw new NotImplementedException ();
\r
333 //Compact Framework
\r
335 public bool MinimizeBox {
\r
337 return minimizeBox;
\r
340 minimizeBox = value;
\r
345 public Size MinimumSize {
\r
347 return maximumSize;
\r
350 maximumSize = value;
\r
355 public bool Modal {
\r
357 throw new NotImplementedException ();
\r
362 public double Opacity {
\r
372 public Form[] OwnedForms {
\r
374 throw new NotImplementedException ();
\r
379 public Form Owner {
\r
381 throw new NotImplementedException ();
\r
389 public bool ShowInTaskbar {
\r
391 throw new NotImplementedException ();
\r
399 public override ISite Site {
\r
409 public SizeGripStyle SizeGripStyle {
\r
411 throw new NotImplementedException ();
\r
419 public FormStartPosition StartPosition {
\r
421 throw new NotImplementedException ();
\r
429 public bool TopLevel {
\r
431 throw new NotImplementedException ();
\r
439 public bool TopMost {
\r
441 throw new NotImplementedException ();
\r
449 public Color TransparencyKey {
\r
451 throw new NotImplementedException ();
\r
459 //Compact Framework
\r
461 public FormWindowState WindowState {
\r
463 WINDOWPLACEMENT placement = new WINDOWPLACEMENT();
\r
465 //bool ReturnValue = Win32.GetWindowPlacement(Handle, ref placement ) ;
\r
466 //if(placement.showCmd == SW_MINIMIZE){
\r
467 // return FormWindowState.Minimized;
\r
469 //if(placement.showCmd == SW_MAXIMIZE){
\r
470 // return FormWindowState.Maximized;
\r
472 return FormWindowState.Normal;
\r
473 //Other options such as hide are possible in win32, but not in this part of .NET
\r
474 // also this may not work because it looks like showCmd is for setting, and might not be set
\r
475 // by win32 in a get.
\r
483 // --- Public Methods
\r
484 public void Activate ()
\r
486 Win32.SetActiveWindow (Handle);
\r
490 public void AddOwnedForm (Form ownedForm)
\r
495 //Compact Framework
\r
496 public void Close ()
\r
498 Win32.DestroyWindow (Handle);
\r
502 public void LayoutMdi (MdiLayout value)
\r
508 public void RemoveOwnedForm (Form ownedForm)
\r
514 public void SetDesktopLocation (int x, int y)
\r
516 Win32.SetWindowPos ((IntPtr) Handle, SetWindowPosZOrder.HWND_TOPMOST,
\r
518 SetWindowPosFlags.SWP_NOSIZE |
\r
519 SetWindowPosFlags.SWP_NOZORDER);
\r
524 public DialogResult ShowDialog ()
\r
526 Win32.ShowWindow (Handle, ShowWindowStyles.SW_SHOW);
\r
527 return new DialogResult();
\r
530 //Compact Framework
\r
532 public override string ToString ()
\r
535 return base.ToString();
\r
538 // --- Public Events
\r
540 public event EventHandler Activated;
\r
542 public event EventHandler Closed;
\r
544 //Compact Framework
\r
545 // CancelEventHandler not yet implemented/stubbed
\r
546 //public event CancelEventHandler Closing;
\r
548 public event EventHandler Deactivate;
\r
549 public event InputLanguageChangedEventHandler InputLanguageChanged;
\r
550 public event InputLanguageChangingEventHandler InputLanguageChanging;
\r
552 //Compact Framework
\r
553 public event EventHandler Load;
\r
555 public event EventHandler MaximizedBoundsChanged;
\r
556 public event EventHandler MaximumSizeChanged;
\r
557 public event EventHandler MdiChildActivate;
\r
558 public event EventHandler MenuComplete;
\r
559 public event EventHandler MenuStart;
\r
560 public event EventHandler MinimumSizedChanged;
\r
563 // --- Protected Properties
\r
565 protected override CreateParams CreateParams {
\r
567 return base.CreateParams;
\r
571 protected override ImeMode DefaultImeMode {
\r
573 return base.DefaultImeMode;
\r
577 protected override Size DefaultSize {
\r
579 return new Size(300,300);
\r
584 public new Size Size {
\r
594 protected Rectangle MaximizedBounds {
\r
596 throw new NotImplementedException ();
\r
604 // --- Protected Methods
\r
606 protected override void AdjustFormScrollbars (
\r
607 bool displayScrollbars)
\r
609 base.AdjustFormScrollbars (displayScrollbars);
\r
612 protected override Control.ControlCollection
\r
613 CreateControlsInstance ()
\r
615 return base.CreateControlsInstance ();
\r
618 protected override void CreateHandle ()
\r
620 base.CreateHandle ();
\r
622 * This is called in base class
\r
623 if (IsHandleCreated)
\r
624 OnHandleCreated (new EventArgs());
\r
628 protected override void DefWndProc (ref Message m)
\r
630 window.DefWndProc (ref m);
\r
633 //Compact Framework
\r
634 protected virtual void OnClosed (EventArgs e)
\r
636 if (Closed != null)
\r
640 //Compact Framework
\r
642 protected virtual void OnClosing(CancelEventArgs e)
\r
644 throw new NotImplementedException ();
\r
647 protected override void OnCreateControl ()
\r
649 base.OnCreateControl ();
\r
652 protected override void OnFontChanged (EventArgs e)
\r
654 base.OnFontChanged (e);
\r
657 protected override void OnHandleCreated (EventArgs e)
\r
659 base.OnHandleCreated (e);
\r
660 Console.WriteLine ("Form.OnHandleCreated");
\r
664 protected override void OnHandleDestroyed (EventArgs e)
\r
666 base.OnHandleDestroyed (e);
\r
669 protected virtual void OnInputLanguageChanged (
\r
670 InputLanguageChangedEventArgs e)
\r
672 if (InputLanguageChanged != null)
\r
673 InputLanguageChanged (this, e);
\r
676 protected virtual void OnInputLanguagedChanging (
\r
677 InputLanguageChangingEventArgs e)
\r
679 if (InputLanguageChanging != null)
\r
680 InputLanguageChanging (this, e);
\r
683 //Compact Framework
\r
684 protected virtual void OnLoad (EventArgs e)
\r
690 protected virtual void OnMaximizedBoundsChanged (EventArgs e)
\r
692 if (MaximizedBoundsChanged != null)
\r
693 MaximizedBoundsChanged (this, e);
\r
696 protected virtual void OnMaximumSizeChanged (EventArgs e)
\r
698 if (MaximumSizeChanged != null)
\r
699 MaximumSizeChanged (this, e);
\r
702 protected virtual void OnMdiChildActivate (EventArgs e)
\r
704 if (MdiChildActivate != null)
\r
705 MdiChildActivate (this, e);
\r
708 protected virtual void OnMenuComplete (EventArgs e)
\r
710 if (MenuComplete != null)
\r
711 MenuComplete (this, e);
\r
714 protected virtual void OnMenuStart (EventArgs e)
\r
716 if (MenuStart != null)
\r
717 MenuStart (this, e);
\r
720 protected virtual void OnMinimumSizeChanged (EventArgs e)
\r
725 //Compact Framework
\r
726 protected override void OnPaint (PaintEventArgs e)
\r
731 //Compact Framework
\r
732 protected override void OnResize (EventArgs e)
\r
738 protected override void OnStyleChanged (EventArgs e)
\r
740 base.OnStyleChanged (e);
\r
743 //Compact Framework
\r
744 protected override void OnTextChanged (EventArgs e)
\r
746 base.OnTextChanged (e);
\r
749 protected override void OnVisibleChanged (EventArgs e)
\r
751 base.OnVisibleChanged (e);
\r
754 protected virtual IntPtr OnMenuCommand (uint id)
\r
756 IntPtr result = (IntPtr)1;
\r
757 System.Console.WriteLine("Form on command {0}", id);
\r
759 MenuItem mi = Menu.GetMenuItemByID( id);
\r
762 result = IntPtr.Zero;
\r
768 protected override void OnWmCommand (ref Message m)
\r
770 uint wNotifyCode = (uint) ( ((uint)m.WParam.ToInt32() & 0xFFFF0000) >> 16);
\r
771 uint wID = (uint)(m.WParam.ToInt32() & 0x0000FFFFL);
\r
772 if( m.LParam.ToInt32() == 0) {
\r
773 if( wNotifyCode == 0) {
\r
775 m.Result = OnMenuCommand(wID);
\r
777 else if( wNotifyCode == 1) {
\r
779 m.Result = (IntPtr)1;
\r
783 base.OnWmCommand(ref m);
\r
787 protected override bool ProcessCmdKey ( ref Message msg, Keys keyData)
\r
789 return base.ProcessCmdKey (ref msg, keyData);
\r
792 protected override bool ProcessDialogKey (Keys keyData)
\r
794 return base.ProcessDialogKey (keyData);
\r
797 protected override bool ProcessKeyPreview (ref Message m)
\r
799 return base.ProcessKeyPreview (ref m);
\r
802 protected override bool ProcessTabKey (bool forward)
\r
804 return base.ProcessTabKey (forward);
\r
807 protected override void ScaleCore (float x, float y)
\r
809 base.ScaleCore (x, y);
\r
812 protected override void SetBoundsCore (
\r
813 int x, int y, int width, int height,
\r
814 BoundsSpecified specified)
\r
816 base.SetBoundsCore (x, y, width, height, specified);
\r
819 protected override void SetClientSizeCore (int x, int y)
\r
821 base.SetClientSizeCore (x, y);
\r
824 protected override void SetVisibleCore (bool value)
\r
826 base.SetVisibleCore (value);
\r
829 protected override void WndProc (ref Message m)
\r
833 EventArgs closeArgs = new EventArgs();
\r
834 OnClosed (closeArgs);
\r
837 //OnCreateControl()
\r
839 case Msg.WM_FONTCHANGE:
\r
840 EventArgs fontChangedArgs = new EventArgs();
\r
841 OnFontChanged (fontChangedArgs);
\r
843 case Msg.WM_CREATE:
\r
844 EventArgs handleCreatedArgs = new EventArgs();
\r
845 OnHandleCreated (handleCreatedArgs);
\r
847 case Msg.WM_DESTROY:
\r
848 EventArgs destroyArgs = new EventArgs();
\r
849 OnHandleDestroyed (destroyArgs);
\r
851 case Msg.WM_INPUTLANGCHANGE:
\r
852 //InputLanguageChangedEventArgs ilChangedArgs =
\r
853 // new InputLanguageChangedEventArgs();
\r
854 //OnInputLanguageChanged (ilChangedArgs);
\r
856 case Msg.WM_INPUTLANGCHANGEREQUEST:
\r
857 //InputLanguageChangingEventArgs ilChangingArgs =
\r
858 // new InputLanguageChangingEventArgs();
\r
859 //OnInputLanguagedChanging (ilChangingArgs);
\r
862 case Win32.WM_SHOWWINDOW:
\r
868 // OnMaximizedBoundsChanged(EventArgs e)
\r
871 // OnMaximumSizedChanged(EventArgs e)
\r
873 case Msg.WM_MDIACTIVATE:
\r
874 EventArgs mdiActivateArgs = new EventArgs();
\r
875 OnMdiChildActivate (mdiActivateArgs);
\r
877 case Msg.WM_EXITMENULOOP:
\r
878 EventArgs menuCompleteArgs = new EventArgs();
\r
879 OnMenuComplete (menuCompleteArgs);
\r
881 case Msg.WM_ENTERMENULOOP:
\r
882 EventArgs enterMenuLoopArgs = new EventArgs();
\r
883 OnMenuStart (enterMenuLoopArgs);
\r
886 // OnMinimumSizeChanged(EventArgs e)
\r
889 case Msg.WM_PAINT: {
\r
890 Rectangle rect = new Rectangle();
\r
891 PaintEventArgs paintArgs = new PaintEventArgs(CreateGraphics(), rect);
\r
892 OnPaint (paintArgs);
\r
893 paintArgs.Dispose();
\r
897 EventArgs resizeArgs = new EventArgs();
\r
898 OnResize (resizeArgs);
\r
901 //OnStyleChanged(EventArgs e)
\r
903 case Msg.WM_SETTEXT:
\r
904 EventArgs textChangedArgs = new EventArgs();
\r
905 OnTextChanged (textChangedArgs);
\r
907 case Msg.WM_SHOWWINDOW:
\r
908 EventArgs visibleChangedArgs = new EventArgs();
\r
909 OnVisibleChanged (visibleChangedArgs);
\r
912 case Msg.WM_INITMENU:
\r
913 OnWmInitMenu (ref m);
\r
915 case Msg.WM_INITMENUPOPUP:
\r
916 OnWmInitMenuPopup (ref m);
\r
918 case Msg.WM_CTLCOLORLISTBOX:
\r
919 Control.ReflectMessage( m.LParam, ref m);
\r
921 case Msg.WM_HSCROLL:
\r
922 case Msg.WM_VSCROLL:
\r
923 Control.ReflectMessage( m.LParam, ref m );
\r
926 base.WndProc (ref m);
\r
931 #region new 11.26.2002 from Alexandre Pigolkine (pigolkine@gmx.de)
\r
932 protected virtual void OnWmInitMenu (ref Message m) {
\r
933 Menu mn = System.Windows.Forms.Menu.GetMenuByHandle( m.WParam);
\r
939 protected virtual void OnWmInitMenuPopup (ref Message m) {
\r
940 Menu mn = System.Windows.Forms.Menu.GetMenuByHandle( m.WParam);
\r
942 mn.OnWmInitMenuPopup();
\r
949 //System.Windows.Forms.Form.ControlCollection.cs
\r
952 // stubbed out by Daniel Carrera (dcarrera@math.toronto.edu)
\r
954 // (C) 2002 Ximian, Inc
\r
958 // This is only a template. Nothing is implemented yet.
\r
961 // TODO: implement support classes and derive from
\r
963 // FIXME: use this or the one defined on Control?
\r
964 public class ControlCollectionX :
\r
965 System.Windows.Forms.Control.ControlCollection
\r
969 // base class not defined (yet!)
\r
970 public ControlCollectionX (Form owner) : base(owner) {
\r
974 // --- Public Methods
\r
976 // TODO: see what causes this compile error
\r
977 public override void Add(Control value) {
\r
981 public override bool Equals (object obj) {
\r
983 return base.Equals(obj);
\r
986 public override int GetHashCode () {
\r
987 //FIXME add our proprities
\r
988 return base.GetHashCode ();
\r
991 public override void Remove(Control value) {
\r
992 base.Remove (value);
\r
994 } // end of Subclass
\r