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
50 // --- Public Properties
\r
53 public IButtonControl AcceptButton {
\r
55 throw new NotImplementedException ();
\r
63 public static Form ActiveForm {
\r
65 throw new NotImplementedException ();
\r
70 public Form ActiveMdiChild {
\r
72 throw new NotImplementedException ();
\r
77 public bool AutoScale {
\r
79 throw new NotImplementedException ();
\r
85 internal Size autoscalebasesize; //debug/test only
\r
88 public virtual Size AutoScaleBaseSize {
\r
90 return autoscalebasesize;
\r
93 autoscalebasesize = value;
\r
97 public override bool AutoScroll {
\r
99 return base.AutoScroll;
\r
102 base.AutoScroll = value;
\r
106 public override Color BackColor {
\r
108 return base.BackColor;
\r
111 base.BackColor = value;
\r
116 public IButtonControl CancelButton {
\r
118 throw new NotImplementedException ();
\r
126 public new Size ClientSize {
\r
128 throw new NotImplementedException ();
\r
133 SetClientSize( value, (int)WindowStyles.WS_OVERLAPPEDWINDOW, mainMenu_ != null);
\r
137 //Compact Framework
\r
139 // In .NET this can be changed at any time.
\r
140 // In WIN32 this is fixed when the window is created.
\r
141 // In WIN32 to change this after the window is created,
\r
142 // like in .NET, we must draw the caption bar our self.
\r
143 // In the mean time, just set/return a bool.
\r
144 // This might be the start of the drawing
\r
146 public bool ControlBox {
\r
151 controlBox = value;
\r
157 public Rectangle DesktopBounds {
\r
159 throw new NotImplementedException ();
\r
167 public Point DesktopLocation {
\r
169 throw new NotImplementedException ();
\r
176 //Compact Framework
\r
178 public DialogResult DialogResult {
\r
180 return dialogResult;
\r
183 dialogResult = value;
\r
187 //Compact Framework
\r
189 public FormBorderStyle FormBorderStyle {
\r
191 return formBorderStyle;
\r
194 formBorderStyle = value;
\r
199 public bool HelpButton {
\r
204 helpButton = value;
\r
208 //Compact Framework
\r
212 throw new NotImplementedException ();
\r
220 public bool IsMidiChild {
\r
222 throw new NotImplementedException ();
\r
230 public bool IsMidiContainer {
\r
232 throw new NotImplementedException ();
\r
240 public bool KeyPreview {
\r
242 throw new NotImplementedException ();
\r
249 //Compact Framework
\r
251 public bool MaximizeBox {
\r
253 return maximizeBox;
\r
256 maximizeBox = value;
\r
261 public Size MaximumSize {
\r
263 return maximumSize;
\r
266 maximumSize = value;
\r
271 public Form[] MdiChildren {
\r
273 throw new NotImplementedException ();
\r
281 public Form MdiParent {
\r
283 throw new NotImplementedException ();
\r
290 //Compact Framework
\r
292 private MainMenu mainMenu_ = null;
\r
294 private void assignMenu()
\r
296 if( Handle != IntPtr.Zero ) {
\r
297 // FIXME: If Form's window has no style for menu, probably, better to add it
\r
298 // if menu have to be removed, remove the style.
\r
299 // Attention to the repainting.
\r
300 if( mainMenu_ != null) {
\r
301 // //long myStyle = Win32.GetWindowLongA( Handle, Win32.GWL_STYLE);
\r
302 // //myStyle |= (long)Win32.WS_OVERLAPPEDWINDOW;
\r
303 // //Win32.SetWindowLongA( Handle, Win32.GWL_STYLE, myStyle);
\r
304 Win32.SetMenu( Handle, mainMenu_.Handle);
\r
307 Win32.SetMenu( Handle, IntPtr.Zero);
\r
312 public MainMenu Menu {
\r
323 //public MainMenu MergedMenu {
\r
325 // throw new NotImplementedException ();
\r
329 //Compact Framework
\r
331 public bool MinimizeBox {
\r
333 return minimizeBox;
\r
336 minimizeBox = value;
\r
341 public Size MinimumSize {
\r
343 return maximumSize;
\r
346 maximumSize = value;
\r
351 public bool Modal {
\r
353 throw new NotImplementedException ();
\r
358 public double Opacity {
\r
368 public Form[] OwnedForms {
\r
370 throw new NotImplementedException ();
\r
375 public Form Owner {
\r
377 throw new NotImplementedException ();
\r
385 public bool ShowInTaskbar {
\r
387 throw new NotImplementedException ();
\r
395 public override ISite Site {
\r
405 public SizeGripStyle SizeGripStyle {
\r
407 throw new NotImplementedException ();
\r
415 public FormStartPosition StartPosition {
\r
417 throw new NotImplementedException ();
\r
425 public bool TopLevel {
\r
427 throw new NotImplementedException ();
\r
435 public bool TopMost {
\r
437 throw new NotImplementedException ();
\r
445 public Color TransparencyKey {
\r
447 throw new NotImplementedException ();
\r
455 //Compact Framework
\r
457 public FormWindowState WindowState {
\r
459 WINDOWPLACEMENT placement = new WINDOWPLACEMENT();
\r
461 //bool ReturnValue = Win32.GetWindowPlacement(Handle, ref placement ) ;
\r
462 //if(placement.showCmd == SW_MINIMIZE){
\r
463 // return FormWindowState.Minimized;
\r
465 //if(placement.showCmd == SW_MAXIMIZE){
\r
466 // return FormWindowState.Maximized;
\r
468 return FormWindowState.Normal;
\r
469 //Other options such as hide are possible in win32, but not in this part of .NET
\r
470 // also this may not work because it looks like showCmd is for setting, and might not be set
\r
471 // by win32 in a get.
\r
479 // --- Public Methods
\r
480 public void Activate ()
\r
482 Win32.SetActiveWindow (Handle);
\r
486 public void AddOwnedForm (Form ownedForm)
\r
491 //Compact Framework
\r
492 public void Close ()
\r
494 Win32.CloseWindow (Handle);
\r
498 public void LayoutMdi (MdiLayout value)
\r
504 public void RemoveOwnedForm (Form ownedForm)
\r
510 public void SetDesktopLocation (int x, int y)
\r
512 Win32.SetWindowPos ((IntPtr) Handle, SetWindowPosZOrder.HWND_TOPMOST,
\r
514 SetWindowPosFlags.SWP_NOSIZE |
\r
515 SetWindowPosFlags.SWP_NOZORDER);
\r
520 public DialogResult ShowDialog ()
\r
522 Win32.ShowWindow (Handle, ShowWindowStyles.SW_SHOW);
\r
523 return new DialogResult();
\r
526 //Compact Framework
\r
528 public override string ToString ()
\r
531 return base.ToString();
\r
534 // --- Public Events
\r
536 public event EventHandler Activated;
\r
538 public event EventHandler Closed;
\r
540 //Compact Framework
\r
541 // CancelEventHandler not yet implemented/stubbed
\r
542 //public event CancelEventHandler Closing;
\r
544 public event EventHandler Deactivate;
\r
545 public event InputLanguageChangedEventHandler InputLanguageChanged;
\r
546 public event InputLanguageChangingEventHandler InputLanguageChanging;
\r
548 //Compact Framework
\r
549 public event EventHandler Load;
\r
551 public event EventHandler MaximizedBoundsChanged;
\r
552 public event EventHandler MaximumSizeChanged;
\r
553 public event EventHandler MdiChildActivate;
\r
554 public event EventHandler MenuComplete;
\r
555 public event EventHandler MenuStart;
\r
556 public event EventHandler MinimumSizedChanged;
\r
559 // --- Protected Properties
\r
561 protected override CreateParams CreateParams {
\r
563 return base.CreateParams;
\r
567 protected override ImeMode DefaultImeMode {
\r
569 return base.DefaultImeMode;
\r
573 protected override Size DefaultSize {
\r
575 return new Size(300,300);
\r
580 public new Size Size {
\r
582 throw new NotImplementedException ();
\r
590 protected Rectangle MaximizedBounds {
\r
592 throw new NotImplementedException ();
\r
600 // --- Protected Methods
\r
602 protected override void AdjustFormScrollbars (
\r
603 bool displayScrollbars)
\r
605 base.AdjustFormScrollbars (displayScrollbars);
\r
608 protected override Control.ControlCollection
\r
609 CreateControlsInstance ()
\r
611 return base.CreateControlsInstance ();
\r
614 protected override void CreateHandle ()
\r
616 base.CreateHandle ();
\r
618 if (IsHandleCreated)
\r
619 OnHandleCreated (new EventArgs());
\r
622 protected override void DefWndProc (ref Message m)
\r
624 window.DefWndProc (ref m);
\r
627 //Compact Framework
\r
628 protected virtual void OnClosed (EventArgs e)
\r
630 if (Closed != null)
\r
634 //Compact Framework
\r
636 protected virtual void OnClosing(CancelEventArgs e)
\r
638 throw new NotImplementedException ();
\r
641 protected override void OnCreateControl ()
\r
643 base.OnCreateControl ();
\r
646 protected override void OnFontChanged (EventArgs e)
\r
648 base.OnFontChanged (e);
\r
651 protected override void OnHandleCreated (EventArgs e)
\r
653 Console.WriteLine ("OnHandleCreated");
\r
655 base.OnHandleCreated (e);
\r
658 protected override void OnHandleDestroyed (EventArgs e)
\r
660 base.OnHandleDestroyed (e);
\r
663 protected virtual void OnInputLanguageChanged (
\r
664 InputLanguageChangedEventArgs e)
\r
666 if (InputLanguageChanged != null)
\r
667 InputLanguageChanged (this, e);
\r
670 protected virtual void OnInputLanguagedChanging (
\r
671 InputLanguageChangingEventArgs e)
\r
673 if (InputLanguageChanging != null)
\r
674 InputLanguageChanging (this, e);
\r
677 //Compact Framework
\r
678 protected virtual void OnLoad (EventArgs e)
\r
684 protected virtual void OnMaximizedBoundsChanged (EventArgs e)
\r
686 if (MaximizedBoundsChanged != null)
\r
687 MaximizedBoundsChanged (this, e);
\r
690 protected virtual void OnMaximumSizeChanged (EventArgs e)
\r
692 if (MaximumSizeChanged != null)
\r
693 MaximumSizeChanged (this, e);
\r
696 protected virtual void OnMdiChildActivate (EventArgs e)
\r
698 if (MdiChildActivate != null)
\r
699 MdiChildActivate (this, e);
\r
702 protected virtual void OnMenuComplete (EventArgs e)
\r
704 if (MenuComplete != null)
\r
705 MenuComplete (this, e);
\r
708 protected virtual void OnMenuStart (EventArgs e)
\r
710 if (MenuStart != null)
\r
711 MenuStart (this, e);
\r
714 protected virtual void OnMinimumSizeChanged (EventArgs e)
\r
719 //Compact Framework
\r
720 protected override void OnPaint (PaintEventArgs e)
\r
725 //Compact Framework
\r
726 protected override void OnResize (EventArgs e)
\r
731 protected override void OnStyleChanged (EventArgs e)
\r
733 base.OnStyleChanged (e);
\r
736 //Compact Framework
\r
737 protected override void OnTextChanged (EventArgs e)
\r
739 base.OnTextChanged (e);
\r
742 protected override void OnVisibleChanged (EventArgs e)
\r
744 base.OnVisibleChanged (e);
\r
747 protected virtual IntPtr OnMenuCommand (uint id)
\r
749 //base.OnVisibleChanged (e);
\r
750 System.Console.WriteLine("Form on command {0}", id);
\r
752 MenuItem mi = Menu.GetMenuItemByID( id);
\r
757 return IntPtr.Zero;
\r
760 protected virtual IntPtr OnWmCommand (ref Message m)
\r
762 uint wNotifyCode = (uint) ( ((uint)m.WParam.ToInt32() & 0xFFFF0000) >> 16);
\r
763 uint wID = (uint)(m.WParam.ToInt32() & 0x0000FFFFL);
\r
764 if( m.LParam.ToInt32() == 0) {
\r
765 if( wNotifyCode == 0) {
\r
767 return OnMenuCommand(wID);
\r
769 else if( wNotifyCode == 1) {
\r
774 // Control notification
\r
775 System.Console.WriteLine("Control notification Code {0} Id {1} Hwnd {2}", wNotifyCode, wID, m.LParam.ToInt32());
\r
776 Control ctrl = Control.FromHandle(m.LParam);
\r
777 if( ctrl != null) {
\r
778 ctrl.OnWmCommand(wNotifyCode, wID, m.LParam);
\r
781 return new IntPtr(1);
\r
784 protected override bool ProcessCmdKey ( ref Message msg, Keys keyData)
\r
786 return base.ProcessCmdKey (ref msg, keyData);
\r
789 protected override bool ProcessDialogKey (Keys keyData)
\r
791 return base.ProcessDialogKey (keyData);
\r
794 protected override bool ProcessKeyPreview (ref Message m)
\r
796 return base.ProcessKeyPreview (ref m);
\r
799 protected override bool ProcessTabKey (bool forward)
\r
801 return base.ProcessTabKey (forward);
\r
804 protected override void ScaleCore (float x, float y)
\r
806 base.ScaleCore (x, y);
\r
809 protected override void SetBoundsCore (
\r
810 int x, int y, int width, int height,
\r
811 BoundsSpecified specified)
\r
813 base.SetBoundsCore (x, y, width, height, specified);
\r
816 protected override void SetClientSizeCore (int x, int y)
\r
818 base.SetClientSizeCore (x, y);
\r
821 protected override void SetVisibleCore (bool value)
\r
823 base.SetVisibleCore (value);
\r
826 protected override void WndProc (ref Message m)
\r
828 base.WndProc (ref m);
\r
832 EventArgs closeArgs = new EventArgs();
\r
833 OnClosed (closeArgs);
\r
836 //OnCreateControl()
\r
838 case Msg.WM_FONTCHANGE:
\r
839 EventArgs fontChangedArgs = new EventArgs();
\r
840 OnFontChanged (fontChangedArgs);
\r
842 case Msg.WM_CREATE:
\r
843 EventArgs handleCreatedArgs = new EventArgs();
\r
844 OnHandleCreated (handleCreatedArgs);
\r
846 case Msg.WM_DESTROY:
\r
847 EventArgs destroyArgs = new EventArgs();
\r
848 OnHandleDestroyed (destroyArgs);
\r
850 case Msg.WM_INPUTLANGCHANGE:
\r
851 //InputLanguageChangedEventArgs ilChangedArgs =
\r
852 // new InputLanguageChangedEventArgs();
\r
853 //OnInputLanguageChanged (ilChangedArgs);
\r
855 case Msg.WM_INPUTLANGCHANGEREQUEST:
\r
856 //InputLanguageChangingEventArgs ilChangingArgs =
\r
857 // new InputLanguageChangingEventArgs();
\r
858 //OnInputLanguagedChanging (ilChangingArgs);
\r
861 case Win32.WM_SHOWWINDOW:
\r
867 // OnMaximizedBoundsChanged(EventArgs e)
\r
870 // OnMaximumSizedChanged(EventArgs e)
\r
872 case Msg.WM_MDIACTIVATE:
\r
873 EventArgs mdiActivateArgs = new EventArgs();
\r
874 OnMdiChildActivate (mdiActivateArgs);
\r
876 case Msg.WM_EXITMENULOOP:
\r
877 EventArgs menuCompleteArgs = new EventArgs();
\r
878 OnMenuComplete (menuCompleteArgs);
\r
880 case Msg.WM_ENTERMENULOOP:
\r
881 EventArgs enterMenuLoopArgs = new EventArgs();
\r
882 OnMenuStart (enterMenuLoopArgs);
\r
885 // OnMinimumSizeChanged(EventArgs e)
\r
888 //PaintEventArgs paintArgs = new PaintEventArgs();
\r
889 //OnPaint (paintArgs);
\r
892 EventArgs resizeArgs = new EventArgs();
\r
893 OnResize (resizeArgs);
\r
896 //OnStyleChanged(EventArgs e)
\r
898 case Msg.WM_SETTEXT:
\r
899 EventArgs textChangedArgs = new EventArgs();
\r
900 OnTextChanged (textChangedArgs);
\r
902 case Msg.WM_SHOWWINDOW:
\r
903 EventArgs visibleChangedArgs = new EventArgs();
\r
904 OnVisibleChanged (visibleChangedArgs);
\r
906 case Msg.WM_COMMAND:
\r
907 OnWmCommand (ref m);
\r
909 case Msg.WM_INITMENU:
\r
910 OnWmInitMenu (ref m);
\r
912 case Msg.WM_INITMENUPOPUP:
\r
913 OnWmInitMenuPopup (ref m);
\r
915 case Msg.WM_CTLCOLORLISTBOX:
\r
916 Control.ReflectMessage( m.LParam, ref m);
\r
918 case Msg.WM_MEASUREITEM:
\r
919 Control.ReflectMessage( m.WParam, ref m);
\r
921 case Msg.WM_DRAWITEM:
\r
922 Control.ReflectMessage( m.WParam, ref m);
\r
927 #region new 11.26.2002 from Alexandre Pigolkine (pigolkine@gmx.de)
\r
928 protected virtual void OnWmInitMenu (ref Message m) {
\r
929 Menu mn = System.Windows.Forms.Menu.GetMenuByHandle( m.WParam);
\r
935 protected virtual void OnWmInitMenuPopup (ref Message m) {
\r
936 Menu mn = System.Windows.Forms.Menu.GetMenuByHandle( m.WParam);
\r
938 mn.OnWmInitMenuPopup();
\r
945 //System.Windows.Forms.Form.ControlCollection.cs
\r
948 // stubbed out by Daniel Carrera (dcarrera@math.toronto.edu)
\r
950 // (C) 2002 Ximian, Inc
\r
954 // This is only a template. Nothing is implemented yet.
\r
957 // TODO: implement support classes and derive from
\r
959 // FIXME: use this or the one defined on Control?
\r
960 public class ControlCollectionX :
\r
961 System.Windows.Forms.Control.ControlCollection
\r
965 // base class not defined (yet!)
\r
966 public ControlCollectionX (Form owner) : base(owner) {
\r
970 // --- Public Methods
\r
972 // TODO: see what causes this compile error
\r
973 public override void Add(Control value) {
\r
977 public override bool Equals (object obj) {
\r
979 return base.Equals(obj);
\r
982 public override int GetHashCode () {
\r
983 //FIXME add our proprities
\r
984 return base.GetHashCode ();
\r
987 public override void Remove(Control value) {
\r
988 base.Remove (value);
\r
990 } // end of Subclass
\r