See last log message
[mono.git] / mcs / class / System.Windows.Forms / System.Windows.Forms / Control.cs
1     //\r
2     // System.Windows.Forms.Control.cs\r
3     //\r
4     // Author:\r
5     //   stubbed out by Jaak Simm (jaaksimm@firm.ee)\r
6     //  Dennis Hayes (dennish@rayetk.com)\r
7     //   WINELib implementation started by John Sohn (jsohn@columbus.rr.com)\r
8     //\r
9     // (C) Ximian, Inc., 2002\r
10     //\r
11     \r
12     using System.ComponentModel;\r
13     using System.Drawing;\r
14     using System.Collections;\r
15     \r
16     namespace System.Windows.Forms {\r
17     \r
18         /// <summary>\r
19         /// Defines the base class for controls, which are components with \r
20         /// visual representation.\r
21         /// </summary>\r
22         \r
23         public class Control : Component , ISynchronizeInvoke, IWin32Window {\r
24     \r
25 \r
26                 // Helper NativeWindow class to dispatch messages back\r
27                 // to the Control class\r
28                 protected class ControlNativeWindow : NativeWindow {\r
29     \r
30                         private Control control;\r
31     \r
32                         public ControlNativeWindow (Control control) : base() {\r
33                                 this.control = control;\r
34                         }\r
35     \r
36                         protected override void WndProc (ref Message m) {\r
37                                 base.WndProc (ref m);\r
38     \r
39                                 control.WndProc (ref m);\r
40                         }\r
41                 }\r
42                 \r
43                 // FIXME: not sure if dervied classes should have access\r
44                 protected ControlNativeWindow window;\r
45                 private ControlCollection childControls;\r
46                 private Control parent;\r
47     \r
48                 // private fields\r
49                 // it seems these are stored in case the window is not created,\r
50                 // corresponding properties (below) need to check if window\r
51                 // is created or not and react accordingly\r
52                 string accessibleDefaultActionDescription;\r
53                 string accessibleDescription;\r
54                 string accessibleName;\r
55                 AccessibleRole accessibleRole;\r
56                 bool allowDrop;\r
57                 AnchorStyles anchor;\r
58                 Color backColor;\r
59                 Image backgroundImage;\r
60                 //BindingContext bindingContext;\r
61                 Rectangle bounds;\r
62                 bool causesValidation;\r
63                 //ContextMenu contextMenu;\r
64                 DockStyle dock;\r
65                 bool enabled;\r
66                 Font font;\r
67                 Color foreColor;\r
68                 ImeMode imeMode;\r
69                 bool isAccessible;\r
70                 // Point location;  // using bounds to store location\r
71                 string name;\r
72                 Region region;\r
73                 RightToLeft rightToLeft;\r
74                 bool tabStop;\r
75                 string text;\r
76                 bool visible;\r
77                         object tag;\r
78                 // --- Constructors ---\r
79     \r
80                         //Compact Framework //only Control()\r
81                 public Control ()\r
82                 {\r
83                         CreateControlsInstance ();\r
84     \r
85                         accessibleDefaultActionDescription = null;\r
86                         accessibleDescription = null;\r
87                         accessibleName = null;\r
88                         accessibleRole = AccessibleRole.Default;\r
89                         allowDrop = false;\r
90                         anchor = AnchorStyles.Top | AnchorStyles.Left;\r
91                         //backColor = Control.DefaultBackColor;\r
92                         backgroundImage = null;\r
93                         bounds = new Rectangle();\r
94                         // bindingContext = null;\r
95                         causesValidation = true;\r
96                         // contextMenu = null;\r
97                         dock = DockStyle.None;\r
98                         enabled = true;\r
99                         // font = Control.DefaultFont;\r
100                         // foreColor = Control.DefaultForeColor;\r
101                         imeMode = ImeMode.Inherit;\r
102                         isAccessible = false;\r
103                         // location = new Point (0,0); should be from OS\r
104                         name = "";\r
105                         region = null;\r
106                         rightToLeft = RightToLeft.Inherit;\r
107                         tabStop = false;\r
108                         text = "";\r
109                         visible = true;\r
110                         parent = null;\r
111                         CreateHandle();//sets window handle. FIXME: No it does not\r
112                 }\r
113                 \r
114                 // according to docs, the constructors do not create \r
115                 // the (HWND) window\r
116                 public Control (string text) : this() \r
117                 {\r
118                         Text = text;\r
119                         // SetWindowTextA (Handle, text);\r
120                 }\r
121                 \r
122                 public Control (Control parent, string text) : this (text) \r
123                 {\r
124                         Parent = parent;\r
125                         // SetParent (Handle, parent.Handle);\r
126                 }\r
127                 \r
128                 public Control (string text, int left, int top, \r
129                                 int width, int height) : this(text) \r
130                 {\r
131                         Left = left;\r
132                         Top = top;\r
133                         Width = width;\r
134                         Height = height;\r
135                         //SetWindowPos (Handle, (IntPtr) 0, left, top,\r
136                         //          width, height, 0);\r
137                 }\r
138                 \r
139                 public Control (Control parent,string text,int left, int top,\r
140                                 int width,int height) : this (parent, text)\r
141                 {\r
142                         Left = left;\r
143                         Top = top;\r
144                         Width = width;\r
145                         Height = height;\r
146                         // SetWindowPos (Handle, (IntPtr) 0, left, top,\r
147                         //                  width, height, 0);\r
148                 }\r
149     \r
150                 // for internal use only, create a control class\r
151                 // for an existing, created HWND\r
152                 private Control (IntPtr existingHandle)\r
153                 {\r
154                         window = (ControlNativeWindow) NativeWindow.FromHandle (\r
155                                 existingHandle);\r
156                 }\r
157     \r
158                 // --- Properties ---\r
159                 // Properties only supporting .NET framework, not stubbed out:\r
160                 //  - protected bool RenderRightToLeft {get;}\r
161                 //  - public IWindowTarget WindowTarget {get; set;}\r
162                 //[MonoTODO]\r
163                 //public AccessibleObject AccessibilityObject {\r
164                 //      get {\r
165                 //              throw new NotImplementedException ();\r
166                 //      }\r
167                 //}\r
168     \r
169                 public string AccessibleDefaultActionDescription {\r
170                         get {\r
171                                 return accessibleDefaultActionDescription;\r
172                         }\r
173                         set {\r
174                                 accessibleDefaultActionDescription = value;\r
175                         }\r
176                 }\r
177                 \r
178                 public string AccessibleDescription {\r
179                         get {\r
180                                 return accessibleDescription;\r
181                         }\r
182                         set {\r
183                                 accessibleDescription=value;\r
184                         }\r
185                 }\r
186                 \r
187                 public string AccessibleName {\r
188                         get {\r
189                                 return accessibleName;\r
190                         }\r
191                         set {\r
192                                 accessibleName=value;\r
193                         }\r
194                 }\r
195                 \r
196                 public AccessibleRole AccessibleRole {\r
197                         get {\r
198                                 return accessibleRole;\r
199                         }\r
200                         set {\r
201                                 accessibleRole=value;\r
202                         }\r
203                 }\r
204                 \r
205                 public virtual bool AllowDrop {\r
206                         get {\r
207                                 return allowDrop;\r
208                         }\r
209                         set {\r
210                                 allowDrop=value;\r
211                         }\r
212                 }\r
213         \r
214                 public virtual AnchorStyles Anchor {\r
215                         get {\r
216                                 return anchor;\r
217                         }\r
218                         set {\r
219                                 anchor=value;\r
220                         }\r
221                 }\r
222                 \r
223                         //Compact Framework\r
224                 public virtual Color BackColor {\r
225                         get {\r
226                                 if (IsHandleCreated) {\r
227                                         IntPtr dc = Win32.GetDC (Handle);\r
228                                         uint bgColor = Win32.GetBkColor (dc);\r
229                                         Win32.ReleaseDC (Handle, dc);\r
230                                         int r = (int) (bgColor & 0xFF);\r
231                                         int g = (int) ((bgColor >> 8) & 0xFF);\r
232                                         int b = (int) ((bgColor >> 16) & 0xFF);\r
233                                         return Color.FromArgb (r, g, b);\r
234                                 }  else return backColor;\r
235                         }\r
236                         set {\r
237                                 backColor = value;\r
238                                 if (IsHandleCreated) {\r
239                                         IntPtr dc = Win32.GetDC (Handle);\r
240                                         Win32.SetBkColor (dc, (uint) value.ToArgb());\r
241                                         Win32.ReleaseDC (Handle, dc);\r
242                                 }\r
243                         }\r
244                 }\r
245                 \r
246                 public virtual Image BackgroundImage {\r
247                         get {\r
248                                 return backgroundImage;\r
249                         }\r
250                         set {\r
251                                 backgroundImage = value;\r
252                                 // FIXME: force redraw\r
253                         }\r
254                 }\r
255     \r
256                 public virtual BindingContext BindingContext {\r
257                         get {\r
258                                 //return bindingContext;\r
259                                 throw new NotImplementedException ();\r
260                         }\r
261                         set {\r
262                                 //bindingContext=value;\r
263                                 throw new NotImplementedException ();\r
264                         }\r
265                 }\r
266                 \r
267                         //Compact Framework\r
268                 public int Bottom {\r
269                         get {\r
270                                 return Top + Height;\r
271                         }\r
272                 }\r
273                 \r
274                         //Compact Framework\r
275                 public Rectangle Bounds {\r
276                         get {\r
277                                 if (IsHandleCreated) {\r
278                                         RECT rect = new RECT();\r
279                                         Win32.GetWindowRect (Handle, ref rect);\r
280                                         return new Rectangle ((int) rect.left, \r
281                                                               (int) rect.top,\r
282                                                               (int) rect.right, \r
283                                                               (int) rect.bottom);\r
284                                 } else return bounds;\r
285                         }\r
286                         set {\r
287                                 if (IsHandleCreated)\r
288                                         Win32.SetWindowPos (\r
289                                                 //Handle, (IntPtr) 0, value.X, value.Y,\r
290                                                         Handle, SetWindowPosZOrder.HWND_TOPMOST, value.X, value.Y,\r
291                                                         value.Width, value.Height, 0);\r
292                                 else bounds = value;\r
293                         }\r
294                 }\r
295                 \r
296                 public bool CanFocus {\r
297                         get {\r
298                                 if (IsHandleCreated && Visible && Enabled)\r
299                                         return true;\r
300                                 return false;\r
301                         }\r
302                 }\r
303                 \r
304                 [MonoTODO]\r
305                 public bool CanSelect {\r
306                         get {\r
307     //                          if (ControlStyles.Selectable &&\r
308     //                              isContainedInAnotherControl &&\r
309     //                              parentIsVisiable && isVisialbe &&\r
310     //                              parentIsEnabled && isEnabled) {\r
311     //                                  return true;\r
312     //                          }\r
313     //                          return false;\r
314     \r
315                                 throw new NotImplementedException ();\r
316                         }\r
317                 }\r
318                 \r
319                         //Compact Framework\r
320                 public bool Capture {\r
321                         get {\r
322                                 if (IsHandleCreated) {\r
323                                         IntPtr captured = Win32.GetCapture ();\r
324                                         if (Handle == captured) \r
325                                                 return true;\r
326                                 }\r
327                                 return false;\r
328                         }\r
329                         set {\r
330                                 if (IsHandleCreated) {\r
331                                         if (value)\r
332                                                 Win32.SetCapture (Handle);\r
333                                         else {\r
334                                                 IntPtr captured = Win32.GetCapture ();\r
335     \r
336                                                 // if this window is in capture state\r
337                                                 // release it\r
338                                                 if (Handle == captured)\r
339                                                         Win32.ReleaseCapture ();\r
340                                         }\r
341                                 }\r
342                         }\r
343                 }\r
344                 \r
345                 public bool CausesValidation {\r
346                         get {\r
347                                 return causesValidation;\r
348                         }\r
349                         set {\r
350                                 causesValidation=value;\r
351                         }\r
352                 }\r
353                 \r
354                         //Compact Framework\r
355                 public Rectangle ClientRectangle {\r
356                         get {\r
357                                 if (IsHandleCreated) {\r
358                                         RECT rect = new RECT();\r
359                                         Win32.GetClientRect (Handle, ref rect);\r
360                                         return new Rectangle ((int) rect.left, \r
361                                                               (int) rect.top,\r
362                                                               (int) rect.right, \r
363                                                               (int) rect.bottom);\r
364                                 }\r
365     \r
366                                 // FIXME: is the correct return value for\r
367                                 // window who's handle is not created\r
368                                 return new Rectangle (0, 0, 0, 0);\r
369                         }\r
370                 }\r
371                 \r
372                         //Compact Framework\r
373                         [MonoTODO]\r
374                         public Size ClientSize {\r
375                                 get {\r
376                                         if (IsHandleCreated) {\r
377                                                 RECT rect = new RECT();\r
378                                                 Win32.GetClientRect (Handle, ref rect);\r
379                                                 return new Size (\r
380                                                         (int) rect.right, \r
381                                                         (int) rect.bottom);\r
382                                         }\r
383                                         // FIXME: is the correct return value for\r
384                                         // window who's handle is not created\r
385                                         return new Size (0, 0);\r
386                                 }\r
387                                 set {
388                                         // FIXME: Is this good default style ?
389                                         SetClientSize(value, (int)(WindowStyles.WS_CHILD | WindowStyles.WS_BORDER), false);
390                                 }
391                         }\r
392                 \r
393                 [MonoTODO]\r
394                 public string CompanyName {\r
395                         get {\r
396                                         //Better than throwing an execption\r
397                                 return "Company Name";\r
398                         }\r
399                 }\r
400
401                         internal void SetClientSize(Size value, int styleIfNoWindow, bool menuIfNoWindow) {
402                                 RECT rc = new RECT();
403                                 rc.left = rc.top = 0;
404                                 rc.right = value.Width;
405                                 rc.bottom = value.Height;
406                                 
407                                 if( Handle != IntPtr.Zero){
408                                         int style = Win32.GetWindowLong( Handle, GetWindowLongFlag.GWL_STYLE).ToInt32();
409                                         int menuExists = 0;
410                                         if( (style & (int)WindowStyles.WS_CHILD) != 0 ){
411                                                 menuExists = Win32.GetMenu(Handle) != IntPtr.Zero ? 1 : 0;
412                                         }
413                                         Win32.AdjustWindowRect( ref rc, style, menuExists);
414                                         Win32.SetWindowPos( Handle, SetWindowPosZOrder.HWND_TOP, 0, 0, 400 /*rc.right - rc.left */, rc.bottom - rc.top, 
415                                                 SetWindowPosFlags.SWP_NOMOVE | SetWindowPosFlags.SWP_NOZORDER);
416                                 }
417                                 else {
418                                         Win32.AdjustWindowRect( ref rc, styleIfNoWindow, menuIfNoWindow ? 1 : 0);
419                                         Width = rc.right - rc.left;
420                                         Height = rc.bottom - rc.top;
421                                 }
422                         }               
423                 \r
424                 public bool ContainsFocus {\r
425                         get {\r
426                                 if (IsHandleCreated) {\r
427                                         IntPtr focusedWindow = Win32.GetFocus();\r
428                                         if (focusedWindow == Handle)\r
429                                                 return true;\r
430                                 }\r
431                                 return false;\r
432                         }\r
433                 }\r
434                 \r
435                         //Compact Framework\r
436                 [MonoTODO]\r
437                 public virtual ContextMenu ContextMenu {\r
438                         get {\r
439                                 //return contextMenu;\r
440                                 throw new NotImplementedException ();\r
441                         }\r
442                         set {\r
443                                 //contextMenu=value;\r
444                                 throw new NotImplementedException ();\r
445                         }\r
446                 }\r
447                 \r
448                 public ControlCollection Controls {\r
449                         get { return childControls; }\r
450                 }\r
451                 \r
452                 public bool Created {\r
453                         get { \r
454                                 if (Handle != (IntPtr) 0)\r
455                                         return true;\r
456                                 return false;\r
457                         }\r
458                 }\r
459                 \r
460                 protected virtual CreateParams CreateParams {\r
461                         get {\r
462                                         CreateParams createParams = new CreateParams ();\r
463                                         createParams.Caption = Text;\r
464                                         createParams.ClassName = "CONTROL";\r
465                                         createParams.X = Left;\r
466                                         createParams.Y = Top;\r
467                                         createParams.Width = Width;\r
468                                         createParams.Height = Height;\r
469                                         createParams.ClassStyle = 0;\r
470                                         createParams.ExStyle = 0;\r
471                                         createParams.Param = 0;\r
472                                 \r
473                                         if (parent != null)\r
474                                                 createParams.Parent = parent.Handle;\r
475                                         else \r
476                                                 createParams.Parent = (IntPtr) 0;\r
477           \r
478                                         createParams.Style = (int) WindowStyles.WS_OVERLAPPEDWINDOW;\r
479           \r
480                                 return createParams;\r
481                         }\r
482                 }\r
483                 \r
484                 [MonoTODO]\r
485                 public virtual Cursor Cursor {\r
486                         get {\r
487                                 throw new NotImplementedException ();\r
488                         }\r
489                         set {\r
490                                 throw new NotImplementedException ();\r
491                         }\r
492                 }\r
493                 \r
494                         //Compact Framework\r
495                 [MonoTODO]\r
496                 // waiting for BindingContext; should be stubbed now\r
497                 public ControlBindingsCollection DataBindings {\r
498                         get {\r
499                                 throw new NotImplementedException ();\r
500                         }\r
501                 }\r
502                 \r
503                 public static Color DefaultBackColor {\r
504                         get {\r
505                                 // FIXME: use GetSystemMetrics?\r
506                                 //return SystemColors.Control;\r
507                                 throw new NotImplementedException ();\r
508                         }\r
509                 }\r
510     \r
511                 //[MonoTODO]\r
512                 // FIXME: use GetSystemMetrics?\r
513                 //public static Font DefaultFont {\r
514                         // FIXME: get current system font from GenericSansSerif\r
515                         //        call ArgumentException not called\r
516                 //      get {\r
517                 //              throw new NotImplementedException ();\r
518                                 //return (FontFamily.GenericSansSerif); \r
519                 //      }\r
520                 //}\r
521                 \r
522                 public static Color DefaultForeColor {\r
523                         get {\r
524                                 return SystemColors.ControlText;\r
525                         }\r
526                 }\r
527                 \r
528                 protected virtual ImeMode DefaultImeMode {\r
529                         get {\r
530                                 return ImeMode.Inherit;\r
531                         }\r
532                 }\r
533                 \r
534                 protected virtual Size DefaultSize {\r
535                         get {\r
536                                         //Default label size, this should be correct.\r
537                                 return new Size(100,23);\r
538                         }\r
539                 }\r
540                 \r
541                 public virtual Rectangle DisplayRectangle {\r
542                         get {\r
543                                 return ClientRectangle;\r
544                         }\r
545                 }\r
546                 \r
547                 [MonoTODO]\r
548                 public bool Disposing {\r
549                         get {\r
550                                 throw new NotImplementedException ();\r
551                         }\r
552                 }\r
553                 \r
554                 public virtual DockStyle Dock {\r
555                         get {\r
556                                 return dock;\r
557                         }\r
558                         set {\r
559                                 dock=value;\r
560                         }\r
561                 }\r
562     \r
563                         //Compact Framework\r
564                 public virtual bool Enabled {\r
565                         get {\r
566                                 return Win32.IsWindowEnabled (Handle);\r
567                         }\r
568                         set {\r
569                                 Win32.EnableWindow (Handle, value);\r
570                         }\r
571                 }\r
572                 \r
573                         //Compact Framework\r
574                 public virtual bool Focused {\r
575                         get {\r
576                                 return ContainsFocus;\r
577                         }\r
578                 }\r
579                 \r
580                         //Compact Framework\r
581                 public virtual Font Font {\r
582                                 get {\r
583                                         throw new NotImplementedException ();\r
584                                         //uint ReturnValue = SendMessage(Handle, WM_GETFONT, IntPtr.Zero, IntPtr.Zero);\r
585                                         //if(ReturnValue != 0)throw new Exception("Could not get Font",null);\r
586                                         //return Handle;\r
587                                 }\r
588                         set {\r
589                                         throw new NotImplementedException ();\r
590                                         //uint ReturnValue = SendMessage(Handle, WM_SETFONT, value, (IntPtr)1 );\r
591                                         //if(ReturnValue != 0)throw new Exception("Could not set Font",null);\r
592                                 }\r
593                 }\r
594                 \r
595                 [MonoTODO]\r
596                 protected int FontHeight {\r
597                         get {\r
598                                 throw new NotImplementedException ();\r
599                         }\r
600                         set {\r
601                                 throw new NotImplementedException ();\r
602                         }\r
603                 }\r
604                 \r
605                         //Compact Framework\r
606                 public virtual Color ForeColor {\r
607                         get {\r
608                                 return foreColor;\r
609                         }\r
610                         set {\r
611                                 foreColor = value;\r
612                         }\r
613                 }\r
614                 \r
615                 public bool HasChildren {\r
616                         get {\r
617                                 if (childControls.Count >0) \r
618                                         return true;\r
619                                 return false;\r
620                         }\r
621                 }\r
622                 \r
623                         //Compact Framework\r
624                 public int Height {\r
625                         get {\r
626                                 if (IsHandleCreated) {\r
627                                         // FIXME: GetWindowPos\r
628                                 }\r
629                                 return bounds.Height;\r
630                         }\r
631                         set {\r
632                                 bounds.Height = value;\r
633                                 if (IsHandleCreated) {\r
634                                         // FIXME: SetWindowPos\r
635                                 }\r
636                         }\r
637                 }\r
638                 \r
639                 public ImeMode ImeMode {\r
640                         // CHECKME:\r
641                         get {\r
642                                 return imeMode;\r
643                         }\r
644                         set {\r
645                                 imeMode=value;\r
646                         }\r
647                 }\r
648                 \r
649                 public bool IsAccessible {\r
650                         // CHECKME:\r
651                         get {\r
652                                 return isAccessible;\r
653                         } // default is false\r
654                         set {\r
655                                 isAccessible=value;\r
656                         }\r
657                 }\r
658                 \r
659                 public bool IsDisposed {\r
660                         get {\r
661                                 if (Handle == (IntPtr) 0)\r
662                                         return true;\r
663                                 return false;\r
664                         }\r
665                 }\r
666                 \r
667                 public bool IsHandleCreated {\r
668                         get {\r
669                                 if (Handle != (IntPtr) 0)\r
670                                         return true;\r
671                                 return false;\r
672                         }\r
673                 }\r
674                 \r
675                         //Compact Framework\r
676                         public int Left {\r
677                                 get {\r
678                                         if (IsHandleCreated) {\r
679                                                 // FIXME: GetWindowPos\r
680                                                 return 0;\r
681                                         } else return bounds.X;\r
682                                 }\r
683                                 set {\r
684                                         bounds.X = value;\r
685  \r
686                                         if (IsHandleCreated) {\r
687                                                 // FIXME: SetWindowPos\r
688                                         }\r
689                                 }\r
690                         }\r
691                 \r
692                         //Compact Framework\r
693                         public Point Location {\r
694                                 // CHECKME:\r
695                                 get {\r
696                                         return new Point (Top, Left);\r
697                                 }\r
698                                 set {\r
699                                         bounds.X = value.X;\r
700                                         bounds.Y = value.Y;\r
701     \r
702                                         if (IsHandleCreated) {\r
703                                                 // FIXME: SetWindowPos\r
704                                         }\r
705     \r
706                                 }\r
707                         }\r
708                 \r
709                 [MonoTODO]\r
710                 public static Keys ModifierKeys {\r
711                         get {\r
712                                 throw new NotImplementedException ();\r
713                         }\r
714                 }\r
715                 \r
716                         //Compact Framework\r
717                 [MonoTODO]\r
718                 public static MouseButtons MouseButtons {\r
719                         get {\r
720                                 // FIXME: use GetAsycKeyState?\r
721                                 throw new NotImplementedException ();\r
722                         }\r
723                 }\r
724                 \r
725                         //Compact Framework\r
726                 public static Point MousePosition {\r
727                         get {\r
728                                 POINT point = new POINT();\r
729                                 Win32.GetCursorPos (ref point);\r
730                                 return new Point ( (int) point.x, (int) point.y);\r
731                         }\r
732                 }\r
733                 \r
734                 public string Name {\r
735                         // CHECKME:\r
736                         get {\r
737                                 return name;\r
738                         }\r
739                         set {\r
740                                 name = value;\r
741                         }\r
742                 }\r
743                 \r
744                         //Compact Framework\r
745                 public Control Parent {\r
746                         get {\r
747                                 return parent;\r
748                                 //IntPtr parent = GetParent (Handle);\r
749                                 //return FromHandle (parent);\r
750                         }\r
751                         set {\r
752                                 Console.WriteLine ("setting parent");\r
753                                 parent = value;\r
754     \r
755                                 Console.WriteLine ("add ourself to the parents control");\r
756                                 // add ourself to the parents control\r
757                                 parent.Controls.Add (this);\r
758     \r
759                                 Console.WriteLine ("SetParent");\r
760                                 if (IsHandleCreated) {\r
761                                         Console.WriteLine ("Handle created");\r
762                                         Win32.SetParent (Handle, value.Handle);\r
763                                 }\r
764                         }\r
765                 }\r
766                 \r
767                 [MonoTODO]\r
768                 public string ProductName {\r
769                         get {\r
770                                         //FIXME:\r
771                                 return "Product Name";\r
772                         }\r
773                 }\r
774                 \r
775                 [MonoTODO]\r
776                 public string ProductVersion {\r
777                         get {\r
778                                         //FIXME:\r
779                                         return "Product Version";\r
780                         }\r
781                 }\r
782                 \r
783                 [MonoTODO]\r
784                 public bool RecreatingHandle {\r
785                         get {\r
786                                 throw new NotImplementedException ();\r
787                         }\r
788                 }\r
789                 \r
790                 public Region Region {\r
791                         // CHECKME:\r
792                         get {\r
793                                 return region;\r
794                         }\r
795                         set {\r
796                                 region = value;\r
797                         }\r
798                 }\r
799                 \r
800                 [MonoTODO]\r
801                 protected bool ResizeRedraw {\r
802                         get {\r
803                                 throw new NotImplementedException ();\r
804                         }\r
805                         set {\r
806                                 throw new NotImplementedException ();\r
807                         }\r
808                 }\r
809                 \r
810                         //Compact Framework\r
811                 public int Right {\r
812                         get {\r
813                                 return Left + Width;\r
814                         }\r
815                 }\r
816                 \r
817                 [MonoTODO]\r
818                 public virtual RightToLeft RightToLeft {\r
819                         // CHECKME:\r
820                         get {\r
821                                 return rightToLeft;\r
822                         }\r
823                         set {\r
824                                 rightToLeft=value;\r
825                         }\r
826                 }\r
827                 \r
828                 [MonoTODO]\r
829                 protected virtual bool ShowFocusCues {\r
830                         get {\r
831                                 throw new NotImplementedException ();\r
832                         }\r
833                 }\r
834                 \r
835                 [MonoTODO]\r
836                 protected bool ShowKeyboardCues {\r
837                         get {\r
838                                 throw new NotImplementedException ();\r
839                         }\r
840                 }\r
841                 \r
842                 [MonoTODO]\r
843                 public override ISite Site {\r
844                         get {\r
845                                 throw new NotImplementedException ();\r
846                         }\r
847                         set {\r
848                                 throw new NotImplementedException ();\r
849                         }\r
850                 }\r
851                 \r
852                         //Compact Framework\r
853                 public Size Size {\r
854                                 //FIXME: should we return client size or someother size???\r
855                         get {\r
856                                         RECT WindowRectangle;\r
857                                         WindowRectangle = new RECT();\r
858                                         if(!Win32.GetWindowRect(Handle,ref WindowRectangle)){\r
859                                                 //throw new Exception("couild not retreve Control Size");\r
860                                         }\r
861                                         return new Size(WindowRectangle.right - WindowRectangle.left,\r
862                                                 WindowRectangle.bottom - WindowRectangle.top);\r
863                         }\r
864                         set {\r
865                                 Win32.SetWindowPos(Handle, SetWindowPosZOrder.HWND_TOP, 0, 0, this.Size.Width, this.Size.Height,\r
866                                                 SetWindowPosFlags.SWP_NOMOVE | SetWindowPosFlags.SWP_NOMOVE | \r
867                                                 SetWindowPosFlags.SWP_NOZORDER);// Activating might be a good idea?? | SetWindowPosFlags.SWP_NOACTIVATE);\r
868                         }\r
869                 }\r
870                 internal int tabindex;//for debug/test only. remove\r
871                 [MonoTODO]\r
872                 public int TabIndex {\r
873                         get {\r
874                                 return tabindex;\r
875                         }\r
876                         set {\r
877                                 tabindex = value;\r
878                         }\r
879                 }\r
880                 \r
881                 public bool TabStop {\r
882                         // CHECKME:\r
883                         get {\r
884                                 return tabStop;\r
885                         }\r
886                         set {\r
887                                 tabStop = value;\r
888                         }\r
889                 }\r
890                 \r
891                 [MonoTODO]\r
892                 public object Tag {\r
893                         get {\r
894                                 return tag;\r
895                         }\r
896                         set {\r
897                                 tag = value;\r
898                         }\r
899                 }\r
900                 \r
901                         //Compact Framework\r
902                 public virtual string Text {\r
903                         get {\r
904                                 if (IsHandleCreated) {\r
905                                         String text = "";\r
906                                         int length = Win32.GetWindowTextLengthA (Handle);\r
907                                         Win32.GetWindowTextA (Handle, ref text, length);\r
908                                         return text;\r
909                                 } \r
910                                         else{\r
911                                                 return text;\r
912                                         }\r
913                         }\r
914                         set {\r
915                                 text = value;\r
916     \r
917                                 if (IsHandleCreated)\r
918                                         Win32.SetWindowTextA (Handle, value);\r
919                         }\r
920                 }\r
921                 \r
922                         //Compact Framework\r
923                 public int Top {\r
924                         get {\r
925                                 if (IsHandleCreated) {\r
926                                         // FIXME: GetWindowPos\r
927                                         return 0;\r
928                                 } else return bounds.Top;\r
929                         }\r
930                         set {\r
931                                 bounds.Y = value;\r
932  \r
933                                 if (IsHandleCreated) {\r
934                                         // FIXME: SetWindowPos\r
935                                 }\r
936                         }\r
937                 }\r
938                 \r
939                 [MonoTODO]\r
940                 public Control TopLevelControl {\r
941                         get {\r
942                                 throw new NotImplementedException ();\r
943                         }\r
944                 }\r
945     \r
946                         //Compact Framework\r
947                 public bool Visible {\r
948                         get {\r
949                                 throw new NotImplementedException ();\r
950                         }\r
951                         set {\r
952                                 if (value)\r
953                                         Win32.ShowWindow (\r
954                                                 Handle, ShowWindowStyles.SW_SHOW);\r
955                                 else\r
956                                         Win32.ShowWindow (\r
957                                                 Handle, ShowWindowStyles.SW_HIDE);\r
958                         }\r
959                 }\r
960                 \r
961                         //Compact Framework\r
962                 public int Width {\r
963                         get {\r
964                                 if (IsHandleCreated) {\r
965                                         // FIXME: GetWindowPos\r
966                                 }\r
967                                 return bounds.Width;\r
968                         }\r
969                         set {\r
970                                 bounds.Width = value;\r
971                                 if (IsHandleCreated) {\r
972                                         // FIXME: SetWindowPos\r
973                                 }\r
974                         }\r
975                 }\r
976                 \r
977                 /// --- methods ---\r
978                 /// internal .NET framework supporting methods, not stubbed out:\r
979                 /// - protected virtual void NotifyInvalidate(Rectangle invalidatedArea)\r
980                 /// - protected void RaiseDragEvent(object key,DragEventArgs e);\r
981                 /// - protected void RaiseKeyEvent(object key,KeyEventArgs e);\r
982                 /// - protected void RaiseMouseEvent(object key,MouseEventArgs e);\r
983                 /// - protected void RaisePaintEvent(object key,PaintEventArgs e);\r
984                 /// - protected void ResetMouseEventArgs();\r
985                 \r
986                 [MonoTODO]\r
987                 protected void AccessibilityNotifyClients (\r
988                         AccessibleEvents accEvent,int childID) \r
989                 {\r
990                         throw new NotImplementedException ();\r
991                 }\r
992                 \r
993                         //Compact Framework\r
994                 [MonoTODO]\r
995                 public void BringToFront () \r
996                 {\r
997                         //FIXME:\r
998                 }\r
999                 \r
1000                 public bool Contains (Control ctl) \r
1001                 {\r
1002                         return childControls.Contains (ctl);\r
1003                 }\r
1004                 \r
1005                 public void CreateControl () \r
1006                 {\r
1007                         CreateHandle ();\r
1008                 }\r
1009     \r
1010                 [MonoTODO]\r
1011                 protected virtual AccessibleObject CreateAccessibilityInstance() {\r
1012                         throw new NotImplementedException ();\r
1013                 }\r
1014                 \r
1015                 protected virtual ControlCollection CreateControlsInstance ()\r
1016                 {\r
1017                         childControls = new ControlCollection (this);\r
1018                         return childControls;\r
1019                 }\r
1020                 \r
1021                         //Compact Framework\r
1022                 [MonoTODO]\r
1023                 public Graphics CreateGraphics () \r
1024                 {\r
1025                         throw new NotImplementedException ();\r
1026                 }\r
1027         \r
1028                 protected virtual void CreateHandle ()\r
1029                 {\r
1030                         window = new ControlNativeWindow (this);\r
1031                         \r
1032                         window.CreateHandle (CreateParams);\r
1033                 }\r
1034         \r
1035                 protected virtual void DefWndProc (ref Message m)\r
1036                 {\r
1037                         window.DefWndProc(ref m);\r
1038                 }\r
1039                 \r
1040                 protected virtual void DestroyHandle ()\r
1041                 {\r
1042                         window.DestroyHandle ();\r
1043                 }\r
1044         \r
1045                 protected override void Dispose (bool disposing) \r
1046                 {\r
1047                                 //FIXME: \r
1048                         base.Dispose(disposing);\r
1049                 }\r
1050         \r
1051                 [MonoTODO]\r
1052                 public DragDropEffects DoDragDrop (\r
1053                         object data, DragDropEffects allowedEffects)\r
1054                 {\r
1055                         throw new NotImplementedException ();\r
1056                 }\r
1057         \r
1058                 //public object EndInvoke(IAsyncResult asyncResult):\r
1059                 //look under ISynchronizeInvoke methods\r
1060         \r
1061                 [MonoTODO]\r
1062                 public Form FindForm () \r
1063                 {\r
1064                         throw new NotImplementedException ();\r
1065                 }\r
1066         \r
1067                         //Compact Framework\r
1068                 public bool Focus () \r
1069                 {\r
1070                         if (Win32.SetFocus (Handle) != (IntPtr) 0)\r
1071                                 return true;\r
1072                         return false;\r
1073                 }\r
1074         \r
1075                 [MonoTODO]\r
1076                 public static Control FromChildHandle (IntPtr handle) \r
1077                 {\r
1078                         throw new NotImplementedException ();\r
1079                 }\r
1080         \r
1081                 public static Control FromHandle (IntPtr handle) \r
1082                 {\r
1083                         Control control = new Control (handle);\r
1084                         return control;\r
1085                 }\r
1086         \r
1087                 [MonoTODO]\r
1088                 public Control GetChildAtPoint (Point pt) \r
1089                 {\r
1090                         throw new NotImplementedException ();\r
1091                 }\r
1092         \r
1093                 // [MonoTODO]\r
1094                 //public IContainerControl GetContainerControl () \r
1095                 //{\r
1096                 //      throw new NotImplementedException ();\r
1097                 //}\r
1098                 \r
1099                 [MonoTODO]\r
1100                 public Control GetNextControl (Control ctl, bool forward) \r
1101                 {\r
1102                         throw new NotImplementedException ();\r
1103                 }\r
1104         \r
1105                 [MonoTODO]\r
1106                 protected bool GetStyle (ControlStyles flag) \r
1107                 {\r
1108                         throw new NotImplementedException ();\r
1109                 }\r
1110         \r
1111                 [MonoTODO]\r
1112                 protected bool GetTopLevel () \r
1113                 {\r
1114                         throw new NotImplementedException ();\r
1115                 }\r
1116                 \r
1117                         //Compact Framework\r
1118                 public void Hide ()\r
1119                 {\r
1120                         if (IsHandleCreated)\r
1121                                 Win32.ShowWindow (Handle, ShowWindowStyles.SW_HIDE);\r
1122                 }\r
1123                 \r
1124                 [MonoTODO]\r
1125                 protected virtual void InitLayout () \r
1126                 {\r
1127                                 //FIXME:\r
1128                 }\r
1129                 \r
1130                         //Compact Framework\r
1131                 public void Invalidate () \r
1132                 {\r
1133                         if (IsHandleCreated) {\r
1134                                         //FIXME: \r
1135                                 //RECT rect = (RECT) null;\r
1136                                 //InvalidateRect (Handle, ref rect, true);\r
1137                         }\r
1138                 }\r
1139                 \r
1140                 [MonoTODO]\r
1141                 public void Invalidate (bool invalidateChildren) \r
1142                 {\r
1143                                 //FIXME:\r
1144                 }\r
1145                 \r
1146                         //Compact Framework\r
1147                 public void Invalidate (Rectangle rc) \r
1148                 {\r
1149                         if (IsHandleCreated) {\r
1150                                 RECT rect = new RECT();\r
1151                                 rect.left = rc.Left;\r
1152                                 rect.top = rc.Top;\r
1153                                 rect.right = rc.Right;\r
1154                                 rect.bottom = rc.Bottom;\r
1155                                 Win32.InvalidateRect (Handle, ref rect, true);\r
1156                         }\r
1157                 }\r
1158                 \r
1159                 [MonoTODO]\r
1160                 public void Invalidate(Region region) \r
1161                 {\r
1162                                 //FIXME:\r
1163                         }\r
1164                 \r
1165                 [MonoTODO]\r
1166                 public void Invalidate (Rectangle rc, bool invalidateChildren) \r
1167                 {\r
1168                                 //FIXME:\r
1169                 }\r
1170                 \r
1171                 [MonoTODO]\r
1172                 public void Invalidate(Region region,bool invalidateChildren) \r
1173                 {\r
1174                                 //FIXME:\r
1175                         }\r
1176                 \r
1177                 [MonoTODO]\r
1178                 protected void InvokeGotFocus (Control toInvoke, EventArgs e) \r
1179                 {\r
1180                                 //FIXME:\r
1181                         }\r
1182                 \r
1183                 [MonoTODO]\r
1184                 protected void InvokeLostFocus (Control toInvoke, EventArgs e) \r
1185                 {\r
1186                                 //FIXME:\r
1187                         }\r
1188                 \r
1189                 [MonoTODO]\r
1190                 protected void InvokeOnClick (Control toInvoke, EventArgs e) \r
1191                 {\r
1192                                 //FIXME:\r
1193                         }\r
1194                 \r
1195                 [MonoTODO]\r
1196                 protected void InvokePaint (Control c, PaintEventArgs e) \r
1197                 {\r
1198                                 //FIXME:\r
1199                         }\r
1200                 \r
1201                 [MonoTODO]\r
1202                 protected void InvokePaintBackground (\r
1203                         Control c,PaintEventArgs e) \r
1204                 {\r
1205                                 //FIXME:\r
1206                         }\r
1207                 \r
1208                 [MonoTODO]\r
1209                 protected virtual bool IsInputChar (char charCode)\r
1210                 {\r
1211                         throw new NotImplementedException ();\r
1212                 }\r
1213                 \r
1214                 [MonoTODO]\r
1215                 protected virtual bool IsInputKey (Keys keyData) \r
1216                 {\r
1217                         throw new NotImplementedException ();\r
1218                 }\r
1219                 \r
1220                 [MonoTODO]\r
1221                 public static bool IsMnemonic (char charCode,string text)\r
1222                 {\r
1223                         throw new NotImplementedException ();\r
1224                 }\r
1225                 \r
1226                 // methods used with events:\r
1227                 protected virtual void OnBackColorChanged (EventArgs e)\r
1228                 {\r
1229                         if (BackColorChanged != null)\r
1230                                 BackColorChanged (this, e);\r
1231                 }\r
1232                 \r
1233                 protected virtual void OnBackgroundImageChanged (EventArgs e)\r
1234                 {\r
1235                         if (BackgroundImageChanged != null) \r
1236                                 BackgroundImageChanged (this, e);\r
1237                 }\r
1238                 \r
1239                 protected virtual void OnBindingContextChanged (EventArgs e)\r
1240                 {\r
1241                         if (BindingContextChanged != null)\r
1242                                 BindingContextChanged (this, e);\r
1243                 }\r
1244                 \r
1245                 protected virtual void OnCausesValidationChanged (EventArgs e)\r
1246                 {\r
1247                         if (CausesValidationChanged != null)\r
1248                                 CausesValidationChanged (this, e);\r
1249                 }\r
1250                 \r
1251                 protected virtual void OnChangeUICues(UICuesEventArgs e) \r
1252                 {\r
1253                         if (ChangeUICues != null)\r
1254                                 ChangeUICues (this, e);\r
1255                 }\r
1256                 \r
1257                         //Compact Framework\r
1258                 protected virtual void OnClick (EventArgs e)\r
1259                 {\r
1260                         if (Click != null)\r
1261                                 Click (this, e);\r
1262                 }\r
1263                 \r
1264     \r
1265                 protected virtual void OnContextMenuChanged (EventArgs e)\r
1266                 {\r
1267                         if (ContextMenuChanged != null)\r
1268                                 ContextMenuChanged (this, e);\r
1269                 }\r
1270                 \r
1271                 protected virtual void OnControlAdded (ControlEventArgs e)\r
1272                 {\r
1273                         if (ControlAdded != null)\r
1274                                 ControlAdded (this, e);\r
1275                 }\r
1276                 \r
1277                 protected virtual void OnControlRemoved (ControlEventArgs e)\r
1278                 {\r
1279                         if (ControlRemoved != null)\r
1280                                 ControlRemoved (this, e);\r
1281                 }\r
1282                 \r
1283                 protected virtual void OnCreateControl ()\r
1284                 {\r
1285                                 //FIXME:\r
1286                         }\r
1287                 \r
1288                 protected virtual void OnCursorChanged (EventArgs e)\r
1289                 {\r
1290                         if (CursorChanged != null)\r
1291                                 CursorChanged (this, e);\r
1292                 }\r
1293                 \r
1294                 protected virtual void OnDockChanged (EventArgs e)\r
1295                 {\r
1296                         if (DockChanged != null)\r
1297                                 DockChanged (this, e);\r
1298                 }\r
1299                 \r
1300                 protected virtual void OnDoubleClick (EventArgs e)\r
1301                 {\r
1302                         if (DoubleClick != null)\r
1303                                 DoubleClick (this, e);\r
1304                 }\r
1305                 \r
1306                 protected virtual void OnDragDrop (DragEventArgs e)\r
1307                 {\r
1308                         if (DragDrop != null)\r
1309                                 DragDrop (this, e);\r
1310                 }\r
1311                 \r
1312                 protected virtual void OnDragEnter (DragEventArgs e)\r
1313                 {\r
1314                         if (DragEnter != null)\r
1315                                 DragEnter (this, e);\r
1316                 }\r
1317                 \r
1318                 protected virtual void OnDragLeave (EventArgs e)\r
1319                 {\r
1320                         if (DragLeave != null)\r
1321                                 DragLeave (this, e);\r
1322                 }\r
1323                 \r
1324                 protected virtual void OnDragOver (DragEventArgs e)\r
1325                 {\r
1326                         if (DragOver != null)\r
1327                                 DragOver (this, e);\r
1328                 }\r
1329                 \r
1330                         //Compact Framework\r
1331                 protected virtual void OnEnabledChanged (EventArgs e)\r
1332                 {\r
1333                         if (EnabledChanged != null)\r
1334                                 EnabledChanged (this, e);\r
1335                 }\r
1336                 \r
1337                 protected virtual void OnEnter (EventArgs e)\r
1338                 {\r
1339                         if (Enter != null)\r
1340                                 Enter (this, e);\r
1341                 }\r
1342                 \r
1343                 protected virtual void OnFontChanged (EventArgs e)\r
1344                 {\r
1345                         if (FontChanged != null)\r
1346                                 FontChanged (this, e);\r
1347                 }\r
1348                 \r
1349                 protected virtual void OnForeColorChanged (EventArgs e) \r
1350                 {\r
1351                         if (ForeColorChanged != null)\r
1352                                 ForeColorChanged (this, e);\r
1353                 }\r
1354                 \r
1355                 protected virtual void OnGiveFeedback (GiveFeedbackEventArgs e)\r
1356                 {\r
1357                         if (GiveFeedback != null)\r
1358                                 GiveFeedback (this, e);\r
1359                 }\r
1360                 \r
1361                         //Compact Framework\r
1362                 protected virtual void OnGotFocus (EventArgs e) \r
1363                 {\r
1364                         if (GotFocus != null)\r
1365                                 GotFocus (this, e);\r
1366                 }\r
1367                 \r
1368                 protected virtual void OnHandleCreated (EventArgs e) \r
1369                 {\r
1370                         Console.WriteLine ("OnHandleCreated");\r
1371     \r
1372                         if (HandleCreated != null)\r
1373                                 HandleCreated (this, e);\r
1374     \r
1375                         // create all child windows\r
1376                         IEnumerator cw = childControls.GetEnumerator();\r
1377     \r
1378                         while (cw.MoveNext()) {\r
1379                                 Console.WriteLine ("Adding Control");\r
1380                                 Control control = (Control) cw.Current;\r
1381                                 control.CreateControl ();\r
1382                                 control.Show ();\r
1383                         }\r
1384                 }\r
1385                 \r
1386                 protected virtual void OnHandleDestroyed (EventArgs e) \r
1387                 {\r
1388                         if (HandleDestroyed != null)\r
1389                                 HandleDestroyed (this, e);\r
1390                 }\r
1391                 \r
1392                 protected virtual void OnHelpRequested (HelpEventArgs e) \r
1393                 {\r
1394                         if (HelpRequested != null)\r
1395                                 HelpRequested (this, e);\r
1396                 }\r
1397                 \r
1398                 protected virtual void OnImeModeChanged (EventArgs e) \r
1399                 {\r
1400                         if (ImeModeChanged != null)\r
1401                                 ImeModeChanged (this, e);\r
1402                 }\r
1403                 \r
1404                 protected virtual void OnInvalidated (InvalidateEventArgs e) \r
1405                 {\r
1406                         if (Invalidated != null)\r
1407                                 Invalidated (this, e);\r
1408                 }\r
1409                 \r
1410                         //Compact Framework\r
1411                 protected virtual void OnKeyDown (KeyEventArgs e) \r
1412                 {\r
1413                         if (KeyDown != null)\r
1414                                 KeyDown (this, e);\r
1415                 }\r
1416                 \r
1417                         //Compact Framework\r
1418                 protected virtual void OnKeyPress (KeyPressEventArgs e) \r
1419                 {\r
1420                         if (KeyPress != null)\r
1421                                 KeyPress (this, e);\r
1422                 }\r
1423                 \r
1424                         //Compact Framework\r
1425                 protected virtual void OnKeyUp (KeyEventArgs e) \r
1426                 {\r
1427                         if (KeyUp != null)\r
1428                                 KeyUp (this, e);\r
1429     \r
1430                 }\r
1431                 \r
1432                 protected virtual void OnLayout (LayoutEventArgs e) \r
1433                 {\r
1434                         if (Layout != null)\r
1435                                 Layout (this, e);\r
1436                 }\r
1437                 \r
1438                 protected virtual void OnLeave (EventArgs e) \r
1439                 {\r
1440                         if (Leave != null)\r
1441                                 Leave (this, e);\r
1442                 }\r
1443                 \r
1444                 protected virtual void OnLocationChanged (EventArgs e) \r
1445                 {\r
1446                         if (LocationChanged != null)\r
1447                                 LocationChanged (this, e);\r
1448                 }\r
1449                 \r
1450                         //Compact Framework\r
1451                 protected virtual void OnLostFocus (EventArgs e) \r
1452                 {\r
1453                         if (LostFocus != null)\r
1454                                 LostFocus (this, e);\r
1455                 }\r
1456                 \r
1457                         //Compact Framework\r
1458                 protected virtual void OnMouseDown (MouseEventArgs e) \r
1459                 {\r
1460                         if (MouseDown != null)\r
1461                                 MouseDown (this, e);\r
1462                 }\r
1463                 \r
1464                 protected virtual void OnMouseEnter (EventArgs e) \r
1465                 {\r
1466                         if (MouseEnter != null)\r
1467                                 MouseEnter (this, e);\r
1468                 }\r
1469     \r
1470                 protected virtual void OnMouseHover (EventArgs e) \r
1471                 {\r
1472                         if (MouseHover != null)\r
1473                                 MouseHover (this, e);\r
1474                 }\r
1475                 \r
1476                 protected virtual void OnMouseLeave (EventArgs e) \r
1477                 {\r
1478                         if (MouseLeave != null)\r
1479                                 MouseLeave (this, e);\r
1480                 }\r
1481                 \r
1482                         //Compact Framework\r
1483                 protected virtual void OnMouseMove (MouseEventArgs e) \r
1484                 {\r
1485                         if (MouseMove != null)\r
1486                                 MouseMove (this, e);\r
1487                 }\r
1488                 \r
1489                         //Compact Framework\r
1490                 protected virtual void OnMouseUp (MouseEventArgs e) \r
1491                 {\r
1492                         if (MouseUp != null)\r
1493                                 MouseUp (this, e);\r
1494                 }\r
1495                 \r
1496                 protected virtual void OnMouseWheel (MouseEventArgs e) \r
1497                 {\r
1498                         if (MouseWheel != null)\r
1499                                 MouseWheel (this, e);\r
1500                 }\r
1501                 \r
1502                 protected virtual void OnMove (EventArgs e) \r
1503                 {\r
1504                         if (Move != null)\r
1505                                 Move (this, e);\r
1506                 }\r
1507                 \r
1508                 protected virtual void OnNotifyMessage (Message m) \r
1509                 {\r
1510                                 //FIXME:\r
1511                         }\r
1512                 \r
1513                         //Compact Framework\r
1514                 protected virtual void OnPaint (PaintEventArgs e) \r
1515                 {\r
1516                         if (Paint != null)\r
1517                                 Paint (this, e);\r
1518                 }\r
1519                 \r
1520                         //Compact Framework\r
1521                 protected virtual void OnPaintBackground (PaintEventArgs e) \r
1522                 {\r
1523                                 //FIXME:\r
1524                         }\r
1525                 \r
1526                 protected virtual void OnParentBackColorChanged (EventArgs e) \r
1527                 {\r
1528                         if (BackColorChanged != null)\r
1529                                 BackColorChanged (this, e);\r
1530                 }\r
1531                 \r
1532                 protected virtual void OnParentBackgroundImageChanged (\r
1533                         EventArgs e) \r
1534                 {\r
1535                         if (BackgroundImageChanged != null)\r
1536                                 BackgroundImageChanged (this, e);\r
1537                 }\r
1538                 \r
1539                 protected virtual void OnParentBindingContextChanged (\r
1540                         EventArgs e) \r
1541                 {\r
1542                         if (BindingContextChanged != null)\r
1543                                 BindingContextChanged (this, e);\r
1544                 }\r
1545                 \r
1546                         //Compact Framework\r
1547                 protected virtual void OnParentChanged (EventArgs e) \r
1548                 {\r
1549                         if (ParentChanged != null)\r
1550                                 ParentChanged (this, e);\r
1551                 }\r
1552                 \r
1553                 protected virtual void OnParentEnabledChanged (EventArgs e) \r
1554                 {\r
1555                         if (EnabledChanged != null)\r
1556                                 EnabledChanged (this, e);\r
1557                 }\r
1558                 \r
1559                 protected virtual void OnParentFontChanged (EventArgs e) \r
1560                 {\r
1561                         if (FontChanged != null)\r
1562                                 FontChanged (this, e);\r
1563                 }\r
1564                 \r
1565                 protected virtual void OnParentForeColorChanged (EventArgs e) \r
1566                 {\r
1567                         if (ForeColorChanged != null)\r
1568                                 ForeColorChanged (this, e);\r
1569                 }\r
1570                 \r
1571                 protected virtual void OnParentRightToLeftChanged (\r
1572                         EventArgs e) \r
1573                 {\r
1574                         if (RightToLeftChanged != null)\r
1575                                 RightToLeftChanged (this, e);\r
1576                 }\r
1577                 \r
1578                 protected virtual void OnParentVisibleChanged (EventArgs e) \r
1579                 {\r
1580                         if (VisibleChanged != null)\r
1581                                 VisibleChanged (this, e);\r
1582                 }\r
1583                 \r
1584                 protected virtual void OnQueryContinueDrag (\r
1585                         QueryContinueDragEventArgs e) \r
1586                 {\r
1587                         if (QueryContinueDrag != null)\r
1588                                 QueryContinueDrag (this, e);\r
1589                 }\r
1590                 \r
1591                         //Compact Framework\r
1592                 protected virtual void OnResize (EventArgs e) \r
1593                 {\r
1594                         if (Resize != null)\r
1595                                 Resize (this, e);\r
1596                 }\r
1597                 \r
1598                 protected virtual void OnRightToLeftChanged (EventArgs e) \r
1599                 {\r
1600                         if (RightToLeftChanged != null)\r
1601                                 RightToLeftChanged (this, e);\r
1602                 }\r
1603                 \r
1604                 protected virtual void OnSizeChanged (EventArgs e) \r
1605                 {\r
1606                         if (SizeChanged != null)\r
1607                                 SizeChanged (this, e);\r
1608                 }\r
1609                 \r
1610                 protected virtual void OnStyleChanged (EventArgs e) \r
1611                 {\r
1612                         if (StyleChanged != null)\r
1613                                 StyleChanged (this, e);\r
1614                 }\r
1615                 \r
1616                 protected virtual void OnSystemColorsChanged (EventArgs e) \r
1617                 {\r
1618                         if (SystemColorsChanged != null)\r
1619                                 SystemColorsChanged (this, e);\r
1620                 }\r
1621                 \r
1622                 protected virtual void OnTabIndexChanged (EventArgs e) \r
1623                 {\r
1624                         if (TabIndexChanged != null)\r
1625                                 TabIndexChanged (this, e);\r
1626                 }\r
1627                 \r
1628                 protected virtual void OnTabStopChanged (EventArgs e) \r
1629                 {\r
1630                         if (TabStopChanged != null)\r
1631                                 TabStopChanged (this, e);\r
1632                 }\r
1633                 \r
1634                         //Compact Framework\r
1635                 protected virtual void OnTextChanged (EventArgs e) \r
1636                 {\r
1637                         if (TextChanged != null)\r
1638                                 TextChanged (this, e);\r
1639                 }\r
1640     \r
1641                 //[MonoTODO] // this doesn't seem to be documented\r
1642     //          protected virtual void OnTextAlignChanged (EventArgs e) {\r
1643     //                  TextAlignChanged (this, e);\r
1644     //          }\r
1645                 \r
1646                 protected virtual void OnValidated (EventArgs e) \r
1647                 {\r
1648                         if (Validated != null)\r
1649                                 Validated (this, e);\r
1650                 }\r
1651                 \r
1652                 //[MonoTODO]\r
1653                 // CancelEventArgs not ready\r
1654                 //protected virtual void OnValidating(CancelEventArgs e) \r
1655                 //{\r
1656                 //      throw new NotImplementedException ();\r
1657                 //}\r
1658                 \r
1659                 [MonoTODO]\r
1660                 protected virtual void OnVisibleChanged (EventArgs e) \r
1661                 {\r
1662                         if (VisibleChanged != null)\r
1663                                 VisibleChanged (this, e);\r
1664                 }\r
1665                 // --- end of methods for events ---\r
1666                 \r
1667                 \r
1668                 [MonoTODO]\r
1669                 public void PerformLayout () \r
1670                 {\r
1671                                 //FIXME:\r
1672                         }\r
1673                 \r
1674                 [MonoTODO]\r
1675                 public void PerformLayout (Control affectedControl,\r
1676                                            string affectedProperty) \r
1677                 {\r
1678                                 //FIXME:\r
1679                         }\r
1680                 \r
1681                         //Compact Framework\r
1682                 [MonoTODO]\r
1683                 public Point PointToClient (Point p) \r
1684                 {\r
1685                         throw new NotImplementedException ();\r
1686                 }\r
1687                 \r
1688                         //Compact Framework\r
1689                 [MonoTODO]\r
1690                 public Point PointToScreen (Point p) \r
1691                 {\r
1692                         throw new NotImplementedException ();\r
1693                 }\r
1694                 \r
1695                 [MonoTODO]\r
1696                 public virtual bool PreProcessMessage (ref Message msg) \r
1697                 {\r
1698                         throw new NotImplementedException ();\r
1699                 }\r
1700                 \r
1701                 [MonoTODO]\r
1702                 protected virtual bool ProcessCmdKey (ref Message msg,\r
1703                                                       Keys keyData) \r
1704                 {\r
1705                         throw new NotImplementedException ();\r
1706                 }\r
1707                 \r
1708                 [MonoTODO]\r
1709                 protected virtual bool ProcessDialogChar (char charCode) \r
1710                 {\r
1711                         throw new NotImplementedException ();\r
1712                 }\r
1713                 \r
1714                 [MonoTODO]\r
1715                 protected virtual bool ProcessDialogKey (Keys keyData) \r
1716                 {\r
1717                         throw new NotImplementedException ();\r
1718                 }\r
1719                 \r
1720                 [MonoTODO]\r
1721                 protected virtual bool ProcessKeyEventArgs (ref Message m) \r
1722                 {\r
1723                         throw new NotImplementedException ();\r
1724                 }\r
1725                 \r
1726                 [MonoTODO]\r
1727                 protected internal virtual bool ProcessKeyMessage (\r
1728                         ref Message m) \r
1729                 {\r
1730                         throw new NotImplementedException ();\r
1731                 }\r
1732                 \r
1733                 [MonoTODO]\r
1734                 protected virtual bool ProcessKeyPreview (ref Message m) \r
1735                 {\r
1736                         throw new NotImplementedException ();\r
1737                 }\r
1738                 \r
1739                 [MonoTODO]\r
1740                 protected virtual bool ProcessMnemonic (char charCode) \r
1741                 {\r
1742                         throw new NotImplementedException ();\r
1743                 }\r
1744                 \r
1745                 // used when properties/values of Control \r
1746                 // are big enough to warrant recreating the HWND\r
1747                 protected void RecreateHandle() \r
1748                 {\r
1749                         CreateHandle ();\r
1750     \r
1751                 }\r
1752                 \r
1753                         //Compact Framework\r
1754                 [MonoTODO]\r
1755                 public Rectangle RectangleToClient (Rectangle r) \r
1756                 {\r
1757                         throw new NotImplementedException ();\r
1758                 }\r
1759                 \r
1760                         //Compact Framework\r
1761                 [MonoTODO]\r
1762                 public Rectangle RectangleToScreen (Rectangle r) \r
1763                 {\r
1764                         throw new NotImplementedException ();\r
1765                 }\r
1766                 \r
1767                 [MonoTODO]\r
1768                 protected static bool ReflectMessage (IntPtr hWnd,\r
1769                                                       ref Message m) \r
1770                 {\r
1771                         throw new NotImplementedException ();\r
1772                 }\r
1773                 \r
1774                         //Compact Framework\r
1775                 public virtual void Refresh () \r
1776                 {\r
1777                         //RECT rect = (RECT) null;\r
1778                         //InvalidateRect (Handle, ref rect, true);\r
1779                         Win32.UpdateWindow (Handle);\r
1780                 }\r
1781                 \r
1782                 [MonoTODO]\r
1783                 public virtual void ResetBackColor () \r
1784                 {\r
1785                                 //FIXME:\r
1786                         }\r
1787                 \r
1788                 [MonoTODO]\r
1789                 public void ResetBindings () \r
1790                 {\r
1791                                 //FIXME:\r
1792                         }\r
1793                 \r
1794                 [MonoTODO]\r
1795                 public virtual void ResetFont () \r
1796                 {\r
1797                                 //FIXME:\r
1798                         }\r
1799                 \r
1800                 [MonoTODO]\r
1801                 public virtual void ResetForeColor () \r
1802                 {\r
1803                                 //FIXME:\r
1804                         }\r
1805                 \r
1806                 [MonoTODO]\r
1807                 public void ResetImeMode () \r
1808                 {\r
1809                                 //FIXME:\r
1810                         }\r
1811                 \r
1812                 [MonoTODO]\r
1813                 public virtual void ResetRightToLeft () \r
1814                 {\r
1815                                 //FIXME:\r
1816                         }\r
1817                 \r
1818                 [MonoTODO]\r
1819                 public virtual void ResetText () \r
1820                 {\r
1821                                 //FIXME:\r
1822                         }\r
1823                 \r
1824                 [MonoTODO]\r
1825                 public void ResumeLayout () \r
1826                 {\r
1827                                 //FIXME:\r
1828                         }\r
1829                 \r
1830                 [MonoTODO]\r
1831                 public void ResumeLayout (bool performLayout) \r
1832                 {\r
1833                                 //FIXME:\r
1834                         }\r
1835                 \r
1836                 [MonoTODO]\r
1837                 protected ContentAlignment RtlTranslateAlignment (\r
1838                         ContentAlignment align) \r
1839                 {\r
1840                         throw new NotImplementedException ();\r
1841                 }\r
1842                 \r
1843                 [MonoTODO]\r
1844                 protected HorizontalAlignment RtlTranslateAlignment (\r
1845                         HorizontalAlignment align) \r
1846                 {\r
1847                         throw new NotImplementedException ();\r
1848                 }\r
1849                 \r
1850                 [MonoTODO]\r
1851                 protected LeftRightAlignment RtlTranslateAlignment (\r
1852                         LeftRightAlignment align) \r
1853                 {\r
1854                         throw new NotImplementedException ();\r
1855                 }\r
1856                 \r
1857                 [MonoTODO]\r
1858                 protected ContentAlignment RtlTranslateContent (\r
1859                         ContentAlignment align) \r
1860                 {\r
1861                         throw new NotImplementedException ();\r
1862                 }\r
1863                 \r
1864                 [MonoTODO]\r
1865                 protected HorizontalAlignment RtlTranslateHorizontal (\r
1866                         HorizontalAlignment align) \r
1867                 {\r
1868                         throw new NotImplementedException ();\r
1869                 }\r
1870                 \r
1871                 [MonoTODO]\r
1872                 protected LeftRightAlignment RtlTranslateLeftRight (\r
1873                         LeftRightAlignment align) \r
1874                 {\r
1875                         throw new NotImplementedException ();\r
1876                 }\r
1877                 \r
1878                 [MonoTODO]\r
1879                 public void Scale (float ratio) \r
1880                 {\r
1881                                 //FIXME:\r
1882                         }\r
1883                 \r
1884                 [MonoTODO]\r
1885                 public void Scale (float dx,float dy) \r
1886                 {\r
1887                                 //FIXME:\r
1888                         }\r
1889                 \r
1890                 [MonoTODO]\r
1891                 protected virtual void ScaleCore (float dx, float dy) \r
1892                 {\r
1893                                 //FIXME:\r
1894                         }\r
1895                 \r
1896                 [MonoTODO]\r
1897                 public void Select () \r
1898                 {\r
1899                                 //FIXME:\r
1900                         }\r
1901                 \r
1902                 [MonoTODO]\r
1903                 protected virtual void Select (bool directed,bool forward) \r
1904                 {\r
1905                                 //FIXME:\r
1906                         }\r
1907                 \r
1908                 [MonoTODO]\r
1909                 public bool SelectNextControl (Control ctl, bool forward, \r
1910                                                bool tabStopOnly, \r
1911                                                bool nested, bool wrap)\r
1912                 {\r
1913                         throw new NotImplementedException ();\r
1914                 }\r
1915                 \r
1916                         //Compact Framework\r
1917                 [MonoTODO]\r
1918                 public void SendToBack () \r
1919                 {\r
1920                                 //FIXME:\r
1921                 }\r
1922                 \r
1923                 [MonoTODO]\r
1924                 public void SetBounds (int x, int y, int width, int height) \r
1925                 {\r
1926                                 //FIXME:\r
1927                         }\r
1928                 \r
1929                 [MonoTODO]\r
1930                 public void SetBounds (int x, int y, int width, int height,\r
1931                                        BoundsSpecified specified) \r
1932                 {\r
1933                                 //FIXME:\r
1934                         }\r
1935                 \r
1936                 [MonoTODO]\r
1937                 protected virtual void SetBoundsCore (\r
1938                         int x, int y, int width, int height,\r
1939                         BoundsSpecified specified) \r
1940                 {\r
1941                                 //FIXME:\r
1942                         }\r
1943                 \r
1944                 [MonoTODO]\r
1945                 protected virtual void SetClientSizeCore (int x, int y)\r
1946                 {\r
1947                                 //FIXME:\r
1948                         }\r
1949                 \r
1950                 [MonoTODO]\r
1951                 protected void SetStyle (ControlStyles flag, bool value) \r
1952                 {\r
1953                                 //FIXME:\r
1954                         }\r
1955                 \r
1956                 protected void SetTopLevel (bool value)\r
1957                 {\r
1958                         if (value)\r
1959                                 // FIXME: verify on whether this is supposed\r
1960                                 // to activate/deactive the window\r
1961                                 Win32.SetWindowPos (Handle, \r
1962                                                 SetWindowPosZOrder.HWND_NOTOPMOST,\r
1963                                                 0, 0, 0, 0, 0);\r
1964                         else\r
1965                                 // FIXME: this does not make sense but\r
1966                                 // the docs say the window is hidden\r
1967                                 Win32.ShowWindow (Handle, ShowWindowStyles.SW_HIDE);\r
1968                 }\r
1969                 \r
1970                 [MonoTODO]\r
1971                 protected virtual void SetVisibleCore (bool value)\r
1972                 {\r
1973                                 //FIXME:\r
1974                         }\r
1975                 \r
1976                         //Compact Framework\r
1977                 public void Show () \r
1978                 {\r
1979                         Win32.ShowWindow (Handle, ShowWindowStyles.SW_SHOW);\r
1980                 }\r
1981                 \r
1982                 [MonoTODO]\r
1983                 public void SuspendLayout () \r
1984                 {\r
1985                                 //FIXME:\r
1986                         }\r
1987                 \r
1988                         //Compact Framework\r
1989                 public void Update () \r
1990                 {\r
1991                         Win32.UpdateWindow (Handle);\r
1992                 }\r
1993                 \r
1994                 [MonoTODO]\r
1995                 protected void UpdateBounds () \r
1996                 {\r
1997                                 //FIXME:\r
1998                         }\r
1999                 \r
2000                 [MonoTODO]\r
2001                 protected void UpdateBounds (int x, int y, int width, int height) \r
2002                 {\r
2003                                 //FIXME:\r
2004                         }\r
2005                 \r
2006                 [MonoTODO]\r
2007                 protected void UpdateBounds (\r
2008                         int x, int y, int width, int height, int clientWidth,\r
2009                         int clientHeight)\r
2010                 {\r
2011                                 //FIXME:\r
2012                         }\r
2013                 \r
2014                 [MonoTODO]\r
2015                 protected void UpdateStyles () \r
2016                 {\r
2017                                 //FIXME:\r
2018                         }\r
2019                 \r
2020                 [MonoTODO]\r
2021                 protected void UpdateZOrder () \r
2022                 {\r
2023                                 //FIXME:\r
2024                         }\r
2025                 \r
2026                 // WndProc - calls appriate On... function for the give\r
2027                 // message\r
2028                 //\r
2029                 // These On... functions do not appear to be called by\r
2030                 // WndProc:\r
2031                 //\r
2032                 // background color/image handled by WinForms\r
2033                 // OnBackColorChanged\r
2034                 // OnBackgroundImageChanged\r
2035                 // OnForeColorChanged\r
2036                 // OnPaintBackground\r
2037                 //\r
2038                 // controls are added/removed by WinForms\r
2039                 // OnControlAdded\r
2040                 // OnControlRemoved\r
2041                 // OnCreateControl\r
2042                 //\r
2043                 // OnBindingContextChanged\r
2044                 // OnCausesValidationChanged\r
2045                 // OnChangeUICues\r
2046                 // OnContextMenuChanged\r
2047                 // OnRightToLeftChanged\r
2048                 // OnGiveFeedback\r
2049                 // OnLayout\r
2050                 // OnDockChanged\r
2051                 // OnCursorChanged\r
2052                 // OnTextAlignChanged\r
2053                 // OnValidated\r
2054                 // OnValidating\r
2055                 // OnTabIndexChanged\r
2056                 // OnTabStopChanged\r
2057                 // OnLocationChanged\r
2058                 //\r
2059                 // FIXME: may be one of the WM_IME_ messages\r
2060                 // OnImeModeChanged \r
2061                 //\r
2062                 // InvalidateRect is called by no Invalidate message exists\r
2063                 // OnInvalidated\r
2064                 //\r
2065                 // these messages ARE not called by WNDPROC according to docs\r
2066                 // OnParentBackColorChanged \r
2067                 // OnParentBackgroundImageChanged\r
2068                 // OnParentBindingContextChanged\r
2069                 // OnParentChanged\r
2070                 // OnParentEnabledChanged\r
2071                 // OnParentFontChanged\r
2072                 // OnParentForeColorChanged\r
2073                 // OnParentRightToLeftChanged\r
2074                 // OnParentVisibleChanged\r
2075                 //\r
2076                 protected virtual void WndProc(ref Message m) \r
2077                 {\r
2078                         EventArgs eventArgs = new EventArgs ();\r
2079                         // FIXME: paintEventArgs is not being created properly\r
2080                                 // FIXME: Graphics does not have a public constructor, you must get one from .NET\r
2081                         //PaintEventArgs paintEventArgs = new PaintEventArgs (\r
2082                         //      new Graphics(), new Rectangle());\r
2083     \r
2084                         switch (m.Msg) {\r
2085     \r
2086                         case Msg.WM_CREATE:\r
2087                                 Console.WriteLine ("WM_CREATE");\r
2088                                 OnHandleCreated (eventArgs);\r
2089                                 break;\r
2090                         case Msg.WM_LBUTTONDBLCLK:\r
2091                                 OnDoubleClick (eventArgs);\r
2092                                 break;\r
2093                                 // OnDragDrop\r
2094                                 // OnDragEnter\r
2095                                 // OnDragLeave\r
2096                                 // OnDragOver\r
2097                                 // OnQueryContinueDrag\r
2098                         case Msg.WM_ENABLE:\r
2099                                 OnEnabledChanged (eventArgs);\r
2100                                 break;\r
2101                         case Msg.WM_SETFOCUS:\r
2102                                 OnEnter (eventArgs);\r
2103                                 OnGotFocus (eventArgs);\r
2104                                 break;\r
2105                         case Msg.WM_FONTCHANGE:\r
2106                                 OnFontChanged (eventArgs);\r
2107                                 break;\r
2108                         case Msg.WM_DESTROY:\r
2109                                 OnHandleDestroyed (eventArgs);\r
2110                                 break;\r
2111                         case Msg.WM_HELP:\r
2112                                 // FIXME:\r
2113                                 //OnHelpRequested (eventArgs);\r
2114                                 break;\r
2115                         case Msg.WM_KEYDOWN:\r
2116                                 // FIXME:\r
2117                                 // OnKeyDown (eventArgs);\r
2118                                 break;\r
2119                         case Msg.WM_CHAR:\r
2120                                 // FIXME:\r
2121                                 // OnKeyPress (eventArgs);\r
2122                                 break;\r
2123                         case Msg.WM_KEYUP:\r
2124                                 // FIXME:\r
2125                                 // OnKeyUp (eventArgs);\r
2126                                 break;\r
2127                         case Msg.WM_KILLFOCUS:\r
2128                                 OnLeave (eventArgs);\r
2129                                 OnLostFocus (eventArgs);\r
2130                                 break;\r
2131                         case Msg.WM_LBUTTONDOWN:\r
2132                                 // FIXME:\r
2133                                 // OnMouseDown (eventArgs);\r
2134                                 break;\r
2135                         case Msg.WM_MOUSEACTIVATE:\r
2136                                 OnMouseEnter (eventArgs);\r
2137                                 break;\r
2138                         case Msg.WM_MOUSEHOVER: // called by TrackMouseEvent\r
2139                                 OnMouseHover (eventArgs);\r
2140                                 break;\r
2141                         case Msg.WM_MOUSELEAVE: // called by TrackMouseEvent\r
2142                                 OnMouseLeave (eventArgs);\r
2143                                 break;\r
2144                         case Msg.WM_MOUSEMOVE:\r
2145                                 // FIXME:\r
2146                                 // OnMouseMove (eventArgs);\r
2147                                 break;\r
2148                         case Msg.WM_LBUTTONUP:\r
2149                                 // FIXME:\r
2150                                 // OnMouseUp (eventArgs);\r
2151                                 break;\r
2152                         case Msg.WM_MOUSEWHEEL:\r
2153                                 // FIXME:\r
2154                                 // OnMouseWheel (eventArgs);\r
2155                                 break;\r
2156                         case Msg.WM_MOVE:\r
2157                                 OnMove (eventArgs);\r
2158                                 break;\r
2159                         case Msg.WM_NOTIFY:\r
2160                                 // FIXME: get NM_CLICKED msg from pnmh\r
2161                                 // OnClick (eventArgs);\r
2162                                 // OnNotifyMessage (eventArgs);\r
2163                         case Msg.WM_PAINT:\r
2164                                 //OnPaint (paintEventArgs);\r
2165                                 break;\r
2166                         case Msg.WM_SIZE:\r
2167                                 OnResize (eventArgs);\r
2168                                 OnSizeChanged (eventArgs);\r
2169                                 break;\r
2170                         case Msg.WM_STYLECHANGED:\r
2171                                 OnStyleChanged (eventArgs);\r
2172                                 break;\r
2173                         case Msg.WM_SYSCOLORCHANGE:\r
2174                                 OnSystemColorsChanged (eventArgs);\r
2175                                 break;\r
2176                         case Msg.WM_SETTEXT:\r
2177                                 OnTextChanged (eventArgs);\r
2178                                 break;\r
2179                         case Msg.WM_SHOWWINDOW:\r
2180                                 OnVisibleChanged (eventArgs);\r
2181                                 break;\r
2182     //                  default:\r
2183     //                          DefWndProc (ref m);\r
2184     //                          break;\r
2185                         }\r
2186                 }\r
2187     \r
2188                 /// --- Control: events ---\r
2189                 public event EventHandler BackColorChanged;\r
2190                 public event EventHandler BackgroundImageChanged;\r
2191                 public event EventHandler BindingContextChanged;\r
2192                 public event EventHandler CausesValidationChanged;\r
2193                 public event UICuesEventHandler ChangeUICues;\r
2194                 \r
2195                         //Compact Framework\r
2196                 public event EventHandler Click;\r
2197                 \r
2198                 public event EventHandler ContextMenuChanged;\r
2199                 public event ControlEventHandler ControlAdded;\r
2200                 public event ControlEventHandler ControlRemoved;\r
2201                 public event EventHandler CursorChanged;\r
2202                 public event EventHandler DockChanged;\r
2203                 public event EventHandler DoubleClick;\r
2204                 public event DragEventHandler DragDrop;\r
2205                 public event DragEventHandler DragEnter;\r
2206                 public event EventHandler DragLeave;\r
2207                 public event DragEventHandler DragOver;\r
2208 \r
2209                         //Compact Framework\r
2210                 public event EventHandler EnabledChanged;\r
2211                 \r
2212                 public event EventHandler Enter;\r
2213                 public event EventHandler FontChanged;\r
2214                 public event EventHandler ForeColorChanged;\r
2215                 public event GiveFeedbackEventHandler GiveFeedback;\r
2216                 \r
2217                         //Compact Framework\r
2218                 public event EventHandler GotFocus;\r
2219                 \r
2220                 public event EventHandler HandleCreated;\r
2221                 public event EventHandler HandleDestroyed;\r
2222                 public event HelpEventHandler HelpRequested;\r
2223                 public event EventHandler ImeModeChanged;\r
2224                 public event InvalidateEventHandler Invalidated;\r
2225                 \r
2226                         //Compact Framework\r
2227                 public event KeyEventHandler KeyDown;\r
2228                 \r
2229                         //Compact Framework\r
2230                 public event KeyPressEventHandler KeyPress;\r
2231                 \r
2232                         //Compact Framework\r
2233                 public event KeyEventHandler KeyUp;\r
2234                 \r
2235                 public event LayoutEventHandler Layout;\r
2236                 public event EventHandler Leave;\r
2237                 public event EventHandler LocationChanged;\r
2238                 \r
2239                         //Compact Framework\r
2240                 public event EventHandler LostFocus;\r
2241 \r
2242                         //Compact Framework\r
2243                 public event MouseEventHandler MouseDown;\r
2244                 \r
2245                 public event EventHandler MouseEnter;\r
2246                 public event EventHandler MouseHover;\r
2247                 public event EventHandler MouseLeave;\r
2248                 \r
2249                         //Compact Framework\r
2250                 public event MouseEventHandler MouseMove;\r
2251                 \r
2252                         //Compact Framework\r
2253                 public event MouseEventHandler MouseUp;\r
2254                 \r
2255                 public event MouseEventHandler MouseWheel;\r
2256                 public event EventHandler Move;\r
2257                 \r
2258                         //Compact Framework\r
2259                 public event PaintEventHandler Paint;\r
2260                 \r
2261                         //Compact Framework\r
2262                 public event EventHandler ParentChanged;\r
2263                 \r
2264                 public event QueryAccessibilityHelpEventHandler QueryAccessibilityHelp;\r
2265                 public event QueryContinueDragEventHandler QueryContinueDrag;\r
2266                 \r
2267                         //Compact Framework\r
2268                 public event EventHandler Resize;\r
2269                 \r
2270                 public event EventHandler RightToLeftChanged;\r
2271                 public event EventHandler SizeChanged;\r
2272                 public event EventHandler StyleChanged;\r
2273                 public event EventHandler SystemColorsChanged;\r
2274                 public event EventHandler TabIndexChanged;\r
2275                 public event EventHandler TabStopChanged;\r
2276                 \r
2277                         //Compact Framework\r
2278                 public event EventHandler TextChanged;\r
2279                 \r
2280                 public event EventHandler Validated;\r
2281                 //[MonoTODO]\r
2282                 // CancelEventHandler not yet defined\r
2283                 //public event CancelEventHandler Validating {\r
2284                 \r
2285                 public event EventHandler VisibleChanged;\r
2286                 \r
2287                 /// --- IWin32Window properties\r
2288                 public IntPtr Handle {\r
2289                         get { \r
2290                                 if (window != null) \r
2291                                         return window.Handle; \r
2292                                 return (IntPtr) 0;\r
2293                         }\r
2294                 }\r
2295                 \r
2296                 /// --- ISynchronizeInvoke properties ---\r
2297                 [MonoTODO]\r
2298                 public bool InvokeRequired {\r
2299                         get { throw new NotImplementedException (); }\r
2300                 }\r
2301                 \r
2302                 /// --- ISynchronizeInvoke methods ---\r
2303                 [MonoTODO]\r
2304                 public IAsyncResult BeginInvoke (Delegate method) \r
2305                 {\r
2306                         throw new NotImplementedException ();\r
2307                 }\r
2308                 \r
2309                 [MonoTODO]\r
2310                 public IAsyncResult BeginInvoke (Delegate method,\r
2311                                                  object[] args) \r
2312                 {\r
2313                         throw new NotImplementedException ();\r
2314                 }\r
2315                 \r
2316                 [MonoTODO]\r
2317                 public object EndInvoke (IAsyncResult asyncResult) \r
2318                 {\r
2319                         throw new NotImplementedException ();\r
2320                 }\r
2321                 \r
2322                 //Compact Framework\r
2323                 [MonoTODO]\r
2324                 public object Invoke (Delegate method) \r
2325                 {\r
2326                         throw new NotImplementedException ();\r
2327                 }\r
2328                 \r
2329                 //[MonoTODO]\r
2330                 public object Invoke (Delegate method, object[] args) \r
2331                 {\r
2332                         throw new NotImplementedException ();\r
2333                 }\r
2334                 \r
2335                 /// sub-class: Control.ControlAccessibleObject\r
2336                 /// <summary>\r
2337                 /// Provides information about a control that can be used by an accessibility application.\r
2338                 /// </summary>\r
2339                 public class ControlAccessibleObject : AccessibleObject {\r
2340                         // AccessibleObject not ready to be base class\r
2341                         /// --- ControlAccessibleObject.constructor ---\r
2342                         [MonoTODO]\r
2343                         public ControlAccessibleObject (Control ownerControl) \r
2344                         {\r
2345                                 throw new NotImplementedException ();\r
2346                         }\r
2347                         \r
2348                         \r
2349                         /// --- ControlAccessibleObject Properties ---\r
2350                         [MonoTODO]\r
2351                         public override string DefaultAction {\r
2352                                 get {\r
2353                                                 //FIXME:\r
2354                                                 return base.DefaultAction;\r
2355                                         }\r
2356                         }\r
2357                         \r
2358                         [MonoTODO]\r
2359                         public override string Description {\r
2360                                 get {\r
2361                                                 //FIXME:\r
2362                                                 return base.Description;\r
2363                                         }\r
2364                         }\r
2365                         \r
2366                         [MonoTODO]\r
2367                         public IntPtr Handle {\r
2368                                 get {\r
2369                                                 throw new NotImplementedException ();\r
2370                                         }\r
2371                                 set {\r
2372                                                 //FIXME:\r
2373                                         }\r
2374                         }\r
2375                         \r
2376                         [MonoTODO]\r
2377                         public override string Help {\r
2378                                 get {\r
2379                                                 //FIXME:\r
2380                                                 return base.Help;\r
2381                                         }\r
2382                         }\r
2383                         \r
2384                         [MonoTODO]\r
2385                         public override string KeyboardShortcut {\r
2386                                 get {\r
2387                                                 //FIXME:\r
2388                                                 return base.KeyboardShortcut;\r
2389                                         }\r
2390                         }\r
2391                         \r
2392                         [MonoTODO]\r
2393                         public override string Name {\r
2394                                 get {\r
2395                                                 //FIXME:\r
2396                                                 return base.Name;\r
2397                                         }\r
2398                                 set {\r
2399                                                 //FIXME:\r
2400                                                 base.Name = value;\r
2401                                         }\r
2402                         }\r
2403                         \r
2404                         [MonoTODO]\r
2405                         public Control Owner {\r
2406                                 get { \r
2407                                                 throw new NotImplementedException ();\r
2408                                         }\r
2409                         }\r
2410                         \r
2411                         [MonoTODO]\r
2412                         public override AccessibleRole Role {\r
2413                                 get {\r
2414                                                 //FIXME:\r
2415                                                 return base.Role;\r
2416                                         }\r
2417                         }\r
2418                         \r
2419                         /// --- ControlAccessibleObject Methods ---\r
2420                         [MonoTODO]\r
2421                         public override int GetHelpTopic(out string fileName) \r
2422                         {\r
2423                                         //FIXME:\r
2424                                         return base.GetHelpTopic(out fileName);\r
2425                                 }\r
2426                         \r
2427                         [MonoTODO]\r
2428                         public void NotifyClients (AccessibleEvents accEvent) \r
2429                         {\r
2430                                         //FIXME:\r
2431                         }\r
2432                         \r
2433                         [MonoTODO]\r
2434                         public void NotifyClients (AccessibleEvents accEvent,\r
2435                                                    int childID) \r
2436                         {\r
2437                                         //FIXME:\r
2438                                 }\r
2439                         \r
2440                         [MonoTODO]\r
2441                         public override string ToString ()\r
2442                         {\r
2443                                         //FIXME:\r
2444                                         return base.ToString();\r
2445                                 }\r
2446                 }\r
2447                 \r
2448                 /// sub-class: Control.ControlCollection\r
2449                 /// <summary>\r
2450                 /// Represents a collection of Control objects\r
2451                 /// </summary>\r
2452                 public class ControlCollection : IList, ICollection, IEnumerable, ICloneable {\r
2453     \r
2454                         private ArrayList collection = new ArrayList ();\r
2455                         private Control owner;\r
2456     \r
2457                         /// --- ControlCollection.constructor ---\r
2458                         public ControlCollection (Control owner) \r
2459                         {\r
2460                                 this.owner = owner;\r
2461                         }\r
2462                 \r
2463                         /// --- ControlCollection Properties ---\r
2464                         public int Count {\r
2465                                 get {\r
2466                                                 return collection.Count;\r
2467                                         }\r
2468                         }\r
2469                 \r
2470                         public bool IsReadOnly {\r
2471                                 get {\r
2472                                                 return collection.IsReadOnly;\r
2473                                         }\r
2474                         }\r
2475                         \r
2476                         public virtual Control this [int index] {\r
2477                                 get {\r
2478                                                 return (Control) collection[index];\r
2479                                         }\r
2480                         }\r
2481                 \r
2482                         public virtual void Add (Control value) \r
2483                         {\r
2484                                 collection.Add (value);\r
2485                         }\r
2486                         \r
2487                         public virtual void AddRange (Control[] controls) \r
2488                         {\r
2489                                 collection.AddRange (controls);\r
2490                         }\r
2491                         \r
2492                         public virtual void Clear () \r
2493                         {\r
2494                                 collection.Clear ();\r
2495                         }\r
2496                 \r
2497                         public bool Contains (Control control) \r
2498                         {\r
2499                                 return collection.Contains (control);\r
2500                         }\r
2501                         \r
2502                         public void CopyTo (Array dest,int index) \r
2503                         {\r
2504                                 collection.CopyTo (dest, index);\r
2505                         }\r
2506                         \r
2507                         [MonoTODO]\r
2508                         public override bool Equals (object obj) \r
2509                         {\r
2510                                         //FIXME:\r
2511                                         return base.Equals(obj);\r
2512                         }\r
2513 \r
2514                         [MonoTODO]\r
2515                         public int GetChildIndex (Control child)\r
2516                         {\r
2517                                 throw new NotImplementedException ();\r
2518                         }\r
2519                         \r
2520                         public IEnumerator GetEnumerator () \r
2521                         {\r
2522                                 return collection.GetEnumerator ();\r
2523                         }\r
2524                         \r
2525                         [MonoTODO]\r
2526                         public override int GetHashCode () \r
2527                         {\r
2528                                         //FIXME:\r
2529                                         return base.GetHashCode();\r
2530                                 }\r
2531                         \r
2532                         public int IndexOf (Control control) \r
2533                         {\r
2534                                 return collection.IndexOf (control);\r
2535                         }\r
2536                         \r
2537                         public virtual void Remove (Control value) \r
2538                         {\r
2539                                 collection.Remove (value);\r
2540                         }\r
2541                         \r
2542                         public void RemoveAt (int index) \r
2543                         {\r
2544                                 collection.RemoveAt (index);\r
2545                         }\r
2546                         \r
2547                         [MonoTODO]\r
2548                         public void SetChildIndex (Control child,int newIndex) \r
2549                         {\r
2550                                         //FIXME:\r
2551                         }\r
2552                         \r
2553                         /// --- ControlCollection.IClonable methods ---\r
2554                         [MonoTODO]\r
2555                         object ICloneable.Clone ()\r
2556                         {\r
2557                                 throw new NotImplementedException ();\r
2558                         }\r
2559                         \r
2560                         /// --- ControlCollection.IList properties ---\r
2561                         bool IList.IsFixedSize {\r
2562                                 get {\r
2563                                                 return collection.IsFixedSize;\r
2564                                         }\r
2565                         }\r
2566     \r
2567                         object IList.this [int index] {\r
2568                                 get {\r
2569                                                 return collection[index];\r
2570                                         }\r
2571                                 set {\r
2572                                                 collection[index] = value;\r
2573                                         }\r
2574                         }\r
2575     \r
2576                         object ICollection.SyncRoot {\r
2577                                 get {\r
2578                                                 return collection.SyncRoot;\r
2579                                         }\r
2580                         }\r
2581         \r
2582                         bool ICollection.IsSynchronized {\r
2583                                 get {\r
2584                                                 return collection.IsSynchronized;\r
2585                                         }\r
2586                         }\r
2587                         \r
2588                         /// --- ControlCollection.IList methods ---\r
2589                         int IList.Add (object control) \r
2590                         {\r
2591                                 return collection.Add (control);\r
2592                         }\r
2593                 \r
2594                         bool IList.Contains (object control) \r
2595                         {\r
2596                                 return collection.Contains (control);\r
2597                         }\r
2598                 \r
2599                         int IList.IndexOf (object control) \r
2600                         {\r
2601                                 return collection.IndexOf (control);\r
2602                         }\r
2603                 \r
2604                         void IList.Insert (int index,object value) \r
2605                         {\r
2606                                 collection.Insert (index, value);\r
2607                         }\r
2608                 \r
2609                         void IList.Remove (object control) \r
2610                         {\r
2611                                 collection.Remove (control);\r
2612                         }\r
2613                 }  // --- end of Control.ControlCollection ---\r
2614         }\r
2615     }\r