Fix bug #395
[mono.git] / mcs / class / Managed.Windows.Forms / System.Windows.Forms / XplatUIStructs.cs
1 // Permission is hereby granted, free of charge, to any person obtaining
2 // a copy of this software and associated documentation files (the
3 // "Software"), to deal in the Software without restriction, including
4 // without limitation the rights to use, copy, modify, merge, publish,
5 // distribute, sublicense, and/or sell copies of the Software, and to
6 // permit persons to whom the Software is furnished to do so, subject to
7 // the following conditions:
8 // 
9 // The above copyright notice and this permission notice shall be
10 // included in all copies or substantial portions of the Software.
11 // 
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
19 //
20 // Copyright (c) 2004-2006 Novell, Inc.
21 //
22 // Authors:
23 //      Peter Bartok    pbartok@novell.com
24 //
25 // *** When you make some changes to this file, dont forget to update Tests/TestHelper class ***
26
27 // NOT COMPLETE
28
29 using System;
30 using System.Drawing;
31 using System.Runtime.InteropServices;
32
33 #if PUBLIC_TYPES
34 namespace Mono.Winforms 
35 #else
36 namespace System.Windows.Forms
37 #endif
38 {
39         [Flags]
40 #if PUBLIC_TYPES
41         public
42 #else
43         internal
44 #endif
45         enum WindowStyles : int {
46                 WS_OVERLAPPED           = 0x00000000,
47                 WS_POPUP                = unchecked((int)0x80000000),
48                 WS_CHILD                = 0x40000000,
49                 WS_MINIMIZE             = 0x20000000,
50                 WS_VISIBLE              = 0x10000000,
51                 WS_DISABLED             = 0x08000000,
52                 WS_CLIPSIBLINGS         = 0x04000000,
53                 WS_CLIPCHILDREN         = 0x02000000,
54                 WS_MAXIMIZE             = 0x01000000,
55                 WS_CAPTION              = 0x00C00000, // == WS_BORDER | WS_DLGFRAME
56                 WS_BORDER               = 0x00800000,
57                 WS_DLGFRAME             = 0x00400000,
58                 WS_VSCROLL              = 0x00200000,
59                 WS_HSCROLL              = 0x00100000,
60                 WS_SYSMENU              = 0x00080000,
61                 WS_THICKFRAME           = 0x00040000,
62                 WS_GROUP                = 0x00020000,
63                 WS_TABSTOP              = 0x00010000,
64                 WS_MINIMIZEBOX          = 0x00020000,
65                 WS_MAXIMIZEBOX          = 0x00010000,
66                 WS_TILED                = 0x00000000,
67                 WS_ICONIC               = 0x20000000,
68                 WS_SIZEBOX              = 0x00040000,
69                 WS_POPUPWINDOW          = unchecked((int)0x80880000),
70                 WS_OVERLAPPEDWINDOW     = WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME | WS_MINIMIZEBOX | WS_MAXIMIZEBOX,
71                 WS_TILEDWINDOW          = WS_OVERLAPPEDWINDOW,
72                 WS_CHILDWINDOW          = WS_CHILD,
73         }
74
75         [Flags]
76 #if PUBLIC_TYPES
77         public
78 #else
79         internal
80 #endif
81         enum WindowExStyles : int {
82                 // Extended Styles
83                 WS_EX_DLGMODALFRAME     = 0x00000001,
84                 WS_EX_DRAGDETECT        = 0x00000002,
85                 WS_EX_NOPARENTNOTIFY    = 0x00000004,
86                 WS_EX_TOPMOST           = 0x00000008,
87                 WS_EX_ACCEPTFILES       = 0x00000010,
88                 WS_EX_TRANSPARENT       = 0x00000020,
89
90                 WS_EX_MDICHILD          = 0x00000040,
91                 WS_EX_TOOLWINDOW        = 0x00000080,
92                 WS_EX_WINDOWEDGE        = 0x00000100,
93                 WS_EX_CLIENTEDGE        = 0x00000200,
94                 WS_EX_CONTEXTHELP       = 0x00000400,
95
96                 WS_EX_RIGHT             = 0x00001000,
97                 WS_EX_LEFT              = 0x00000000,
98                 WS_EX_RTLREADING        = 0x00002000,
99                 WS_EX_LTRREADING        = 0x00000000,
100                 WS_EX_LEFTSCROLLBAR     = 0x00004000,
101                 WS_EX_LAYERED           = 0x00080000,
102                 WS_EX_RIGHTSCROLLBAR    = 0x00000000,
103
104                 WS_EX_CONTROLPARENT     = 0x00010000,
105                 WS_EX_STATICEDGE        = 0x00020000,
106                 WS_EX_APPWINDOW         = 0x00040000,
107                 WS_EX_NOINHERITLAYOUT   = 0x00100000,
108                 WS_EX_LAYOUTRTL         = 0x00400000,
109                 WS_EX_COMPOSITED        = 0x02000000,
110                 WS_EX_NOACTIVATE        = 0x08000000,
111
112                 WS_EX_OVERLAPPEDWINDOW  = WS_EX_WINDOWEDGE | WS_EX_CLIENTEDGE,
113                 WS_EX_PALETTEWINDOW     = WS_EX_WINDOWEDGE | WS_EX_TOOLWINDOW | WS_EX_TOPMOST
114         }
115
116         [Flags]
117 #if PUBLIC_TYPES
118         public
119 #else
120         internal
121 #endif
122         enum ToolBarStyles : int {
123                 TBSTYLE_TOOLTIPS    = 0x100,
124                 TBSTYLE_FLAT        = 0x800,
125                 TBSTYLE_LIST        = 0x1000,
126                 TBSTYLE_TRANSPARENT = 0x8000
127         }
128
129 #if PUBLIC_TYPES
130         public
131 #else
132         internal
133 #endif
134         enum Msg {
135                 WM_NULL                   = 0x0000,
136                 WM_CREATE                 = 0x0001,
137                 WM_DESTROY                = 0x0002,
138                 WM_MOVE                   = 0x0003,
139                 WM_SIZE                   = 0x0005,
140                 WM_ACTIVATE               = 0x0006,
141                 WM_SETFOCUS               = 0x0007,
142                 WM_KILLFOCUS              = 0x0008,
143                 //              public const uint WM_SETVISIBLE           = 0x0009;
144                 WM_ENABLE                 = 0x000A,
145                 WM_SETREDRAW              = 0x000B,
146                 WM_SETTEXT                = 0x000C,
147                 WM_GETTEXT                = 0x000D,
148                 WM_GETTEXTLENGTH          = 0x000E,
149                 WM_PAINT                  = 0x000F,
150                 WM_CLOSE                  = 0x0010,
151                 WM_QUERYENDSESSION        = 0x0011,
152                 WM_QUIT                   = 0x0012,
153                 WM_QUERYOPEN              = 0x0013,
154                 WM_ERASEBKGND             = 0x0014,
155                 WM_SYSCOLORCHANGE         = 0x0015,
156                 WM_ENDSESSION             = 0x0016,
157                 //              public const uint WM_SYSTEMERROR          = 0x0017;
158                 WM_SHOWWINDOW             = 0x0018,
159                 WM_CTLCOLOR               = 0x0019,
160                 WM_WININICHANGE           = 0x001A,
161                 WM_SETTINGCHANGE          = 0x001A,
162                 WM_DEVMODECHANGE          = 0x001B,
163                 WM_ACTIVATEAPP            = 0x001C,
164                 WM_FONTCHANGE             = 0x001D,
165                 WM_TIMECHANGE             = 0x001E,
166                 WM_CANCELMODE             = 0x001F,
167                 WM_SETCURSOR              = 0x0020,
168                 WM_MOUSEACTIVATE          = 0x0021,
169                 WM_CHILDACTIVATE          = 0x0022,
170                 WM_QUEUESYNC              = 0x0023,
171                 WM_GETMINMAXINFO          = 0x0024,
172                 WM_PAINTICON              = 0x0026,
173                 WM_ICONERASEBKGND         = 0x0027,
174                 WM_NEXTDLGCTL             = 0x0028,
175                 //              public const uint WM_ALTTABACTIVE         = 0x0029;
176                 WM_SPOOLERSTATUS          = 0x002A,
177                 WM_DRAWITEM               = 0x002B,
178                 WM_MEASUREITEM            = 0x002C,
179                 WM_DELETEITEM             = 0x002D,
180                 WM_VKEYTOITEM             = 0x002E,
181                 WM_CHARTOITEM             = 0x002F,
182                 WM_SETFONT                = 0x0030,
183                 WM_GETFONT                = 0x0031,
184                 WM_SETHOTKEY              = 0x0032,
185                 WM_GETHOTKEY              = 0x0033,
186                 //              public const uint WM_FILESYSCHANGE        = 0x0034;
187                 //              public const uint WM_ISACTIVEICON         = 0x0035;
188                 //              public const uint WM_QUERYPARKICON        = 0x0036;
189                 WM_QUERYDRAGICON          = 0x0037,
190                 WM_COMPAREITEM            = 0x0039,
191                 //              public const uint WM_TESTING              = 0x003a;
192                 //              public const uint WM_OTHERWINDOWCREATED = 0x003c;
193                 WM_GETOBJECT              = 0x003D,
194                 //                      public const uint WM_ACTIVATESHELLWINDOW        = 0x003e;
195                 WM_COMPACTING             = 0x0041,
196                 WM_COMMNOTIFY             = 0x0044 ,
197                 WM_WINDOWPOSCHANGING      = 0x0046,
198                 WM_WINDOWPOSCHANGED       = 0x0047,
199                 WM_POWER                  = 0x0048,
200                 WM_COPYDATA               = 0x004A,
201                 WM_CANCELJOURNAL          = 0x004B,
202                 WM_NOTIFY                 = 0x004E,
203                 WM_INPUTLANGCHANGEREQUEST = 0x0050,
204                 WM_INPUTLANGCHANGE        = 0x0051,
205                 WM_TCARD                  = 0x0052,
206                 WM_HELP                   = 0x0053,
207                 WM_USERCHANGED            = 0x0054,
208                 WM_NOTIFYFORMAT           = 0x0055,
209                 WM_CONTEXTMENU            = 0x007B,
210                 WM_STYLECHANGING          = 0x007C,
211                 WM_STYLECHANGED           = 0x007D,
212                 WM_DISPLAYCHANGE          = 0x007E,
213                 WM_GETICON                = 0x007F,
214
215                 // Non-Client messages
216                 WM_SETICON                = 0x0080,
217                 WM_NCCREATE               = 0x0081,
218                 WM_NCDESTROY              = 0x0082,
219                 WM_NCCALCSIZE             = 0x0083,
220                 WM_NCHITTEST              = 0x0084,
221                 WM_NCPAINT                = 0x0085,
222                 WM_NCACTIVATE             = 0x0086,
223                 WM_GETDLGCODE             = 0x0087,
224                 WM_SYNCPAINT              = 0x0088,
225                 //              public const uint WM_SYNCTASK       = 0x0089;
226                 WM_NCMOUSEMOVE            = 0x00A0,
227                 WM_NCLBUTTONDOWN          = 0x00A1,
228                 WM_NCLBUTTONUP            = 0x00A2,
229                 WM_NCLBUTTONDBLCLK        = 0x00A3,
230                 WM_NCRBUTTONDOWN          = 0x00A4,
231                 WM_NCRBUTTONUP            = 0x00A5,
232                 WM_NCRBUTTONDBLCLK        = 0x00A6,
233                 WM_NCMBUTTONDOWN          = 0x00A7,
234                 WM_NCMBUTTONUP            = 0x00A8,
235                 WM_NCMBUTTONDBLCLK        = 0x00A9,
236                 //              public const uint WM_NCXBUTTONDOWN    = 0x00ab;
237                 //              public const uint WM_NCXBUTTONUP      = 0x00ac;
238                 //              public const uint WM_NCXBUTTONDBLCLK  = 0x00ad;
239                 WM_KEYDOWN                = 0x0100,
240                 WM_KEYFIRST               = 0x0100,
241                 WM_KEYUP                  = 0x0101,
242                 WM_CHAR                   = 0x0102,
243                 WM_DEADCHAR               = 0x0103,
244                 WM_SYSKEYDOWN             = 0x0104,
245                 WM_SYSKEYUP               = 0x0105,
246                 WM_SYSCHAR                = 0x0106,
247                 WM_SYSDEADCHAR            = 0x0107,
248                 WM_KEYLAST                = 0x0108,
249                 WM_IME_STARTCOMPOSITION   = 0x010D,
250                 WM_IME_ENDCOMPOSITION     = 0x010E,
251                 WM_IME_COMPOSITION        = 0x010F,
252                 WM_IME_KEYLAST            = 0x010F,
253                 WM_INITDIALOG             = 0x0110,
254                 WM_COMMAND                = 0x0111,
255                 WM_SYSCOMMAND             = 0x0112,
256                 WM_TIMER                  = 0x0113,
257                 WM_HSCROLL                = 0x0114,
258                 WM_VSCROLL                = 0x0115,
259                 WM_INITMENU               = 0x0116,
260                 WM_INITMENUPOPUP          = 0x0117,
261                 //              public const uint WM_SYSTIMER       = 0x0118;
262                 WM_MENUSELECT             = 0x011F,
263                 WM_MENUCHAR               = 0x0120,
264                 WM_ENTERIDLE              = 0x0121,
265                 WM_MENURBUTTONUP          = 0x0122,
266                 WM_MENUDRAG               = 0x0123,
267                 WM_MENUGETOBJECT          = 0x0124,
268                 WM_UNINITMENUPOPUP        = 0x0125,
269                 WM_MENUCOMMAND            = 0x0126,
270                 
271                 WM_CHANGEUISTATE          = 0x0127,
272                 WM_UPDATEUISTATE          = 0x0128,
273                 WM_QUERYUISTATE           = 0x0129,
274
275                 //              public const uint WM_LBTRACKPOINT     = 0x0131;
276                 WM_CTLCOLORMSGBOX         = 0x0132,
277                 WM_CTLCOLOREDIT           = 0x0133,
278                 WM_CTLCOLORLISTBOX        = 0x0134,
279                 WM_CTLCOLORBTN            = 0x0135,
280                 WM_CTLCOLORDLG            = 0x0136,
281                 WM_CTLCOLORSCROLLBAR      = 0x0137,
282                 WM_CTLCOLORSTATIC         = 0x0138,
283                 WM_MOUSEMOVE              = 0x0200,
284                 WM_MOUSEFIRST                     = 0x0200,
285                 WM_LBUTTONDOWN            = 0x0201,
286                 WM_LBUTTONUP              = 0x0202,
287                 WM_LBUTTONDBLCLK          = 0x0203,
288                 WM_RBUTTONDOWN            = 0x0204,
289                 WM_RBUTTONUP              = 0x0205,
290                 WM_RBUTTONDBLCLK          = 0x0206,
291                 WM_MBUTTONDOWN            = 0x0207,
292                 WM_MBUTTONUP              = 0x0208,
293                 WM_MBUTTONDBLCLK          = 0x0209,
294                 WM_MOUSEWHEEL             = 0x020A,
295                 WM_MOUSELAST             = 0x020D,
296                 //              public const uint WM_XBUTTONDOWN      = 0x020B;
297                 //              public const uint WM_XBUTTONUP        = 0x020C;
298                 //              public const uint WM_XBUTTONDBLCLK    = 0x020D;
299                 WM_PARENTNOTIFY           = 0x0210,
300                 WM_ENTERMENULOOP          = 0x0211,
301                 WM_EXITMENULOOP           = 0x0212,
302                 WM_NEXTMENU               = 0x0213,
303                 WM_SIZING                 = 0x0214,
304                 WM_CAPTURECHANGED         = 0x0215,
305                 WM_MOVING                 = 0x0216,
306                 //              public const uint WM_POWERBROADCAST   = 0x0218;
307                 WM_DEVICECHANGE           = 0x0219,
308                 WM_MDICREATE              = 0x0220,
309                 WM_MDIDESTROY             = 0x0221,
310                 WM_MDIACTIVATE            = 0x0222,
311                 WM_MDIRESTORE             = 0x0223,
312                 WM_MDINEXT                = 0x0224,
313                 WM_MDIMAXIMIZE            = 0x0225,
314                 WM_MDITILE                = 0x0226,
315                 WM_MDICASCADE             = 0x0227,
316                 WM_MDIICONARRANGE         = 0x0228,
317                 WM_MDIGETACTIVE           = 0x0229,
318                 /* D&D messages */
319                 //              public const uint WM_DROPOBJECT     = 0x022A;
320                 //              public const uint WM_QUERYDROPOBJECT  = 0x022B;
321                 //              public const uint WM_BEGINDRAG      = 0x022C;
322                 //              public const uint WM_DRAGLOOP       = 0x022D;
323                 //              public const uint WM_DRAGSELECT     = 0x022E;
324                 //              public const uint WM_DRAGMOVE       = 0x022F;
325                 WM_MDISETMENU             = 0x0230,
326                 WM_ENTERSIZEMOVE          = 0x0231,
327                 WM_EXITSIZEMOVE           = 0x0232,
328                 WM_DROPFILES              = 0x0233,
329                 WM_MDIREFRESHMENU         = 0x0234,
330                 WM_IME_SETCONTEXT         = 0x0281,
331                 WM_IME_NOTIFY             = 0x0282,
332                 WM_IME_CONTROL            = 0x0283,
333                 WM_IME_COMPOSITIONFULL    = 0x0284,
334                 WM_IME_SELECT             = 0x0285,
335                 WM_IME_CHAR               = 0x0286,
336                 WM_IME_REQUEST            = 0x0288,
337                 WM_IME_KEYDOWN            = 0x0290,
338                 WM_IME_KEYUP              = 0x0291,
339                 WM_NCMOUSEHOVER           = 0x02A0,
340                 WM_MOUSEHOVER             = 0x02A1,
341                 WM_NCMOUSELEAVE           = 0x02A2,
342                 WM_MOUSELEAVE             = 0x02A3,
343                 WM_CUT                    = 0x0300,
344                 WM_COPY                   = 0x0301,
345                 WM_PASTE                  = 0x0302,
346                 WM_CLEAR                  = 0x0303,
347                 WM_UNDO                   = 0x0304,
348                 WM_RENDERFORMAT           = 0x0305,
349                 WM_RENDERALLFORMATS       = 0x0306,
350                 WM_DESTROYCLIPBOARD       = 0x0307,
351                 WM_DRAWCLIPBOARD          = 0x0308,
352                 WM_PAINTCLIPBOARD         = 0x0309,
353                 WM_VSCROLLCLIPBOARD       = 0x030A,
354                 WM_SIZECLIPBOARD          = 0x030B,
355                 WM_ASKCBFORMATNAME        = 0x030C,
356                 WM_CHANGECBCHAIN          = 0x030D,
357                 WM_HSCROLLCLIPBOARD       = 0x030E,
358                 WM_QUERYNEWPALETTE        = 0x030F,
359                 WM_PALETTEISCHANGING      = 0x0310,
360                 WM_PALETTECHANGED         = 0x0311,
361                 WM_HOTKEY                 = 0x0312,
362                 WM_PRINT                  = 0x0317,
363                 WM_PRINTCLIENT            = 0x0318,
364                 WM_HANDHELDFIRST          = 0x0358,
365                 WM_HANDHELDLAST           = 0x035F,
366                 WM_AFXFIRST               = 0x0360,
367                 WM_AFXLAST                = 0x037F,
368                 WM_PENWINFIRST            = 0x0380,
369                 WM_PENWINLAST             = 0x038F,
370                 WM_APP                    = 0x8000,
371                 WM_USER                   = 0x0400,
372
373                 // Our "private" ones
374                 WM_MOUSE_ENTER            = 0x0401,
375                 WM_ASYNC_MESSAGE          = 0x0403,
376                 WM_REFLECT                = WM_USER + 0x1c00,
377                 WM_CLOSE_INTERNAL         = WM_USER + 0x1c01,
378
379                 // private messages to support on-the-spot IME editing.
380                 WM_XIM_PREEDITSTART               = WM_USER + 0x1d00,
381                 WM_XIM_PREEDITDONE                = WM_USER + 0x1d01,
382                 WM_XIM_PREEDITDRAW                = WM_USER + 0x1d02,
383                 WM_XIM_PREEDITCARET               = WM_USER + 0x1d03,
384
385                 // NotifyIcon (Systray) Balloon messages 
386                 NIN_BALLOONSHOW           = WM_USER + 0x0002,
387                 NIN_BALLOONHIDE           = WM_USER + 0x0003,
388                 NIN_BALLOONTIMEOUT        = WM_USER + 0x0004,
389                 NIN_BALLOONUSERCLICK      = WM_USER + 0x0005 
390         }
391
392 #if PUBLIC_TYPES
393         public
394 #else
395         internal
396 #endif
397         enum MsgButtons {
398                 MK_LBUTTON              = 0x0001,
399                 MK_RBUTTON              = 0x0002,
400                 MK_SHIFT                = 0x0004,
401                 MK_CONTROL              = 0x0008,
402                 MK_MBUTTON              = 0x0010,
403                 MK_XBUTTON1             = 0x0020,
404                 MK_XBUTTON2             = 0x0040,
405         }
406
407 #if PUBLIC_TYPES
408         public
409 #else
410         internal
411 #endif
412         enum MsgUIState {
413                 UIS_SET        = 1,
414                 UIS_CLEAR      = 2,
415                 UIS_INITIALIZE = 3,
416                 UISF_HIDEFOCUS = 0x1,
417                 UISF_HIDEACCEL = 0x2,
418                 UISF_ACTIVE    = 0x4
419         }
420
421         [StructLayout(LayoutKind.Sequential)]
422 #if PUBLIC_TYPES
423         public
424 #else
425         internal
426 #endif
427         struct POINT {
428                 public int x;
429                 public int y;
430
431                 public POINT (int x, int y)
432                 {
433                         this.x = x;
434                         this.y = y;
435                 }
436
437                 public Point ToPoint ()
438                 {
439                         return new Point (x, y);
440                 }
441
442                 public override string ToString ()
443                 {
444                         return "Point {" + x.ToString () + ", " + y.ToString () + "}";
445                 }
446         }
447         
448         [StructLayout(LayoutKind.Sequential)] 
449 #if PUBLIC_TYPES
450         public
451 #else
452         internal
453 #endif
454         struct MSG {
455                 internal IntPtr hwnd;
456                 internal Msg    message;
457                 internal IntPtr wParam; 
458                 internal IntPtr lParam;
459                 internal uint   time;  
460                 internal POINT  pt;
461                 internal object refobject;
462
463                 public override string ToString ()
464                 {
465                         return String.Format ("msg=0x{0:x} ({1}) hwnd=0x{2:x} wparam=0x{3:x} lparam=0x{4:x} pt={5}", (int) message, message.ToString (), hwnd.ToInt32 (), wParam.ToInt32 (), lParam.ToInt32 (), pt);
466                 }
467         }
468
469         [Flags]
470 #if PUBLIC_TYPES
471         public
472 #else
473         internal
474 #endif
475         enum TransparencySupport {
476                 None = 0x00,
477                 Get = 0x01,
478                 Set = 0x02,
479                 GetSet = 0x03
480         }
481
482 #if PUBLIC_TYPES
483         public
484 #else
485         internal
486 #endif
487         enum WindowActiveFlags {
488                 WA_INACTIVE             = 0,
489                 WA_ACTIVE               = 1,
490                 WA_CLICKACTIVE          = 2
491         }
492
493 #if PUBLIC_TYPES
494         public
495 #else
496         internal
497 #endif
498         enum KeybdEventFlags {
499                 None                    = 0,
500                 ExtendedKey             = 0x0001,
501                 KeyUp                   = 0x0002
502         }
503
504 #if PUBLIC_TYPES
505         public
506 #else
507         internal
508 #endif
509         enum VirtualKeys {
510                 VK_LBUTTON              = 0x01,
511                 VK_RBUTTON              = 0x02,
512                 VK_CANCEL               = 0x03,
513                 VK_MBUTTON              = 0x04,
514                 VK_XBUTTON1             = 0x05,
515                 VK_XBUTTON2             = 0x06,
516                 VK_BACK                 = 0x08,
517                 VK_TAB                  = 0x09,
518                 VK_CLEAR                = 0x0C,
519                 VK_RETURN               = 0x0D,
520                 VK_SHIFT                = 0x10,
521                 VK_CONTROL              = 0x11,
522                 VK_MENU                 = 0x12,
523                 VK_PAUSE                = 0x13,
524                 VK_CAPITAL              = 0x14,
525                 VK_ESCAPE               = 0x1B,
526                 VK_CONVERT              = 0x1C,
527                 VK_NONCONVERT   = 0x1D,
528                 VK_SPACE                = 0x20,
529                 VK_PRIOR                = 0x21,
530                 VK_NEXT                 = 0x22,
531                 VK_END                  = 0x23,
532                 VK_HOME                 = 0x24,
533                 VK_LEFT                 = 0x25,
534                 VK_UP                   = 0x26,
535                 VK_RIGHT                = 0x27,
536                 VK_DOWN                 = 0x28,
537                 VK_SELECT               = 0x29,
538                 VK_PRINT                = 0x2A,
539                 VK_EXECUTE              = 0x2B,
540                 VK_SNAPSHOT             = 0x2C,
541                 VK_INSERT               = 0x2D,
542                 VK_DELETE               = 0x2E,
543                 VK_HELP                 = 0x2F,
544                 VK_0                    = 0x30,
545                 VK_1                    = 0x31,
546                 VK_2                    = 0x32,
547                 VK_3                    = 0x33,
548                 VK_4                    = 0x34,
549                 VK_5                    = 0x35,
550                 VK_6                    = 0x36,
551                 VK_7                    = 0x37,
552                 VK_8                    = 0x38,
553                 VK_9                    = 0x39,
554                 VK_A                    = 0x41,
555                 VK_B                    = 0x42,
556                 VK_C                    = 0x43,
557                 VK_D                    = 0x44,
558                 VK_E                    = 0x45,
559                 VK_F                    = 0x46,
560                 VK_G                    = 0x47,
561                 VK_H                    = 0x48,
562                 VK_I                    = 0x49,
563                 VK_J                    = 0x4A,
564                 VK_K                    = 0x4B,
565                 VK_L                    = 0x4C,
566                 VK_M                    = 0x4D,
567                 VK_N                    = 0x4E,
568                 VK_O                    = 0x4F,
569                 VK_P                    = 0x50,
570                 VK_Q                    = 0x51,
571                 VK_R                    = 0x52,
572                 VK_S                    = 0x53,
573                 VK_T                    = 0x54,
574                 VK_U                    = 0x55,
575                 VK_V                    = 0x56,
576                 VK_W                    = 0x57,
577                 VK_X                    = 0x58,
578                 VK_Y                    = 0x59,
579                 VK_Z                    = 0x5A,
580                 VK_LWIN                 = 0x5B,
581                 VK_RWIN                 = 0x5C,
582                 VK_APPS                 = 0x5D,
583                 VK_NUMPAD0              = 0x60,
584                 VK_NUMPAD1              = 0x61,
585                 VK_NUMPAD2              = 0x62,
586                 VK_NUMPAD3              = 0x63,
587                 VK_NUMPAD4              = 0x64,
588                 VK_NUMPAD5              = 0x65,
589                 VK_NUMPAD6              = 0x66,
590                 VK_NUMPAD7              = 0x67,
591                 VK_NUMPAD8              = 0x68,
592                 VK_NUMPAD9              = 0x69,
593                 VK_MULTIPLY             = 0x6A,
594                 VK_ADD                  = 0x6B,
595                 VK_SEPARATOR            = 0x6C,
596                 VK_SUBTRACT             = 0x6D,
597                 VK_DECIMAL              = 0x6E,
598                 VK_DIVIDE               = 0x6F,
599                 VK_F1                   = 0x70,
600                 VK_F2                   = 0x71,
601                 VK_F3                   = 0x72,
602                 VK_F4                   = 0x73,
603                 VK_F5                   = 0x74,
604                 VK_F6                   = 0x75,
605                 VK_F7                   = 0x76,
606                 VK_F8                   = 0x77,
607                 VK_F9                   = 0x78,
608                 VK_F10                  = 0x79,
609                 VK_F11                  = 0x7A,
610                 VK_F12                  = 0x7B,
611                 VK_F13                  = 0x7C,
612                 VK_F14                  = 0x7D,
613                 VK_F15                  = 0x7E,
614                 VK_F16                  = 0x7F,
615                 VK_F17                  = 0x80,
616                 VK_F18                  = 0x81,
617                 VK_F19                  = 0x82,
618                 VK_F20                  = 0x83,
619                 VK_F21                  = 0x84,
620                 VK_F22                  = 0x85,
621                 VK_F23                  = 0x86,
622                 VK_F24                  = 0x87,
623                 VK_NUMLOCK              = 0x90,
624                 VK_SCROLL               = 0x91,
625                 VK_LSHIFT               = 0xA0,   
626                 VK_RSHIFT               = 0xA1,   
627                 VK_LCONTROL             = 0xA2,   
628                 VK_RCONTROL             = 0xA3,   
629                 VK_LMENU                = 0xA4,   
630                 VK_RMENU                = 0xA5,
631                 VK_OEM_1                = 0xBA,
632                 VK_OEM_PLUS             = 0xBB,
633                 VK_OEM_COMMA            = 0xBC,
634                 VK_OEM_MINUS            = 0xBD,
635                 VK_OEM_PERIOD           = 0xBE,
636                 VK_OEM_2                = 0xBF, 
637                 VK_OEM_3                = 0xC0,
638                 VK_OEM_4                = 0xDB,
639                 VK_OEM_5                = 0xDC,
640                 VK_OEM_6                = 0xDD,
641                 VK_OEM_7                = 0xDE,
642                 VK_OEM_8                = 0xDF,
643                 VK_OEM_AX               = 0xE1,
644                 VK_OEM_102              = 0xE2,
645                 VK_ICO_HELP             = 0xE3,
646                 VK_ICO_00               = 0xE4,
647                 VK_PROCESSKEY           = 0xE5,
648                 VK_OEM_ATTN             = 0xF0,
649                 VK_OEM_COPY             = 0xF2,
650                 VK_OEM_AUTO             = 0xF3,
651                 VK_OEM_ENLW             = 0xF4,
652                 VK_OEM_BACKTAB          = 0xF5,
653                 VK_ATTN                 = 0xF6,
654                 VK_CRSEL                = 0xF7,
655                 VK_EXSEL                = 0xF8,
656                 VK_EREOF                = 0xF9,
657                 VK_PLAY                 = 0xFA,
658                 VK_ZOOM                 = 0xFB,
659                 VK_NONAME               = 0xFC,
660                 VK_PA1                  = 0xFD,
661                 VK_OEM_CLEAR            = 0xFE,
662         }
663
664 #if PUBLIC_TYPES
665         public
666 #else
667         internal
668 #endif
669         enum TtyKeys {
670                 XK_BackSpace            = 0xff08,  /* Back space, back char */
671                 XK_Tab                  = 0xff09,
672                 XK_Linefeed             = 0xff0a,  /* Linefeed, LF */
673                 XK_Clear                = 0xff0b,
674                 XK_Return               = 0xff0d,  /* Return, enter */
675                 XK_Pause                = 0xff13,  /* Pause, hold */
676                 XK_Scroll_Lock          = 0xff14,
677                 XK_Sys_Req              = 0xff15,
678                 XK_Escape               = 0xff1b,
679                 XK_Delete               = 0xffff  /* Delete, rubout */
680         }
681
682 #if PUBLIC_TYPES
683         public
684 #else
685         internal
686 #endif
687         enum MiscKeys {
688                 XK_ISO_Lock             = 0xfe01,
689                 XK_ISO_Last_Group_Lock  = 0xfe0f,
690                 XK_Select               = 0xff60,
691                 XK_Print                = 0xff61,
692                 XK_Execute              = 0xff62,
693                 XK_Insert               = 0xff63,
694                 XK_Undo                 = 0xff65,
695                 XK_Redo                 = 0xff66,
696                 XK_Menu                 = 0xff67,
697                 XK_Find                 = 0xff68,
698                 XK_Cancel               = 0xff69,
699                 XK_Help                 = 0xff6a,
700                 XK_Break                = 0xff6b,
701                 XK_Mode_switch          = 0xff7e,
702                 XK_script_switch        = 0xff7e,
703                 XK_Num_Lock             = 0xff7f
704         }
705
706 #if PUBLIC_TYPES
707         public
708 #else
709         internal
710 #endif
711         enum KeypadKeys {
712                 XK_KP_Space             = 0xff80,
713                 XK_KP_Tab               = 0xff89,
714                 XK_KP_Enter             = 0xff8d,  /* Enter */
715                 XK_KP_F1                = 0xff91,  /* PF1, KP_A, ... */
716                 XK_KP_F2                = 0xff92,
717                 XK_KP_F3                = 0xff93,
718                 XK_KP_F4                = 0xff94,
719                 XK_KP_Home              = 0xff95,
720                 XK_KP_Left              = 0xff96,
721                 XK_KP_Up                = 0xff97,
722                 XK_KP_Right             = 0xff98,
723                 XK_KP_Down              = 0xff99,
724                 XK_KP_Prior             = 0xff9a,
725                 XK_KP_Page_Up           = 0xff9a,
726                 XK_KP_Next              = 0xff9b,
727                 XK_KP_Page_Down         = 0xff9b,
728                 XK_KP_End               = 0xff9c,
729                 XK_KP_Begin             = 0xff9d,
730                 XK_KP_Insert            = 0xff9e,
731                 XK_KP_Delete            = 0xff9f,
732                 XK_KP_Equal             = 0xffbd,  /* Equals */
733                 XK_KP_Multiply          = 0xffaa,
734                 XK_KP_Add               = 0xffab,
735                 XK_KP_Separator         = 0xffac,  /* Separator, often comma */
736                 XK_KP_Subtract          = 0xffad,
737                 XK_KP_Decimal           = 0xffae,
738                 XK_KP_Divide            = 0xffaf,
739
740                 XK_KP_0                 = 0xffb0,
741                 XK_KP_1                 = 0xffb1,
742                 XK_KP_2                 = 0xffb2,
743                 XK_KP_3                 = 0xffb3,
744                 XK_KP_4                 = 0xffb4,
745                 XK_KP_5                 = 0xffb5,
746                 XK_KP_6                 = 0xffb6,
747                 XK_KP_7                 = 0xffb7,
748                 XK_KP_8                 = 0xffb8,
749                 XK_KP_9                 = 0xffb9
750         }
751
752 #if PUBLIC_TYPES
753         public
754 #else
755         internal
756 #endif
757         enum DeadKeys {
758                 XK_dead_grave           = 0xfe50,
759                 XK_dead_acute           = 0xfe51,
760                 XK_dead_circumflex      = 0xfe52,
761                 XK_dead_tilde           = 0xfe53,
762                 XK_dead_macron          = 0xfe54,
763                 XK_dead_breve           = 0xfe55,
764                 XK_dead_abovedot        = 0xfe56,
765                 XK_dead_diaeresis       = 0xfe57,
766                 XK_dead_abovering       = 0xfe58,
767                 XK_dead_doubleacute     = 0xfe59,
768                 XK_dead_caron           = 0xfe5a,
769                 XK_dead_cedilla         = 0xfe5b,
770                 XK_dead_ogonek          = 0xfe5c,
771                 XK_dead_iota            = 0xfe5d,
772                 XK_dead_voiced_sound    = 0xfe5e,
773                 XK_dead_semivoiced_sound  = 0xfe5f,
774                 XK_dead_belowdot        = 0xfe60,
775                 XK_dead_hook            = 0xfe61,
776                 XK_dead_horn            = 0xfe62
777
778         }
779
780         [StructLayout(LayoutKind.Sequential)]
781 #if PUBLIC_TYPES
782          public
783 #else
784         internal
785 #endif
786         struct HELPINFO {
787                 internal uint           cbSize;
788                 internal int            iContextType;
789                 internal int            iCtrlId;
790                 internal IntPtr         hItemHandle;
791                 internal uint           dwContextId;
792                 internal POINT          MousePos;
793         }
794
795 #if PUBLIC_TYPES
796         public
797 #else
798         internal
799 #endif
800         enum PeekMessageFlags {
801                 PM_NOREMOVE                     = 0x00000000,
802                 PM_REMOVE                       = 0x00000001,
803                 PM_NOYIELD                      = 0x00000002
804         }
805
806 #if PUBLIC_TYPES
807         public
808 #else
809         internal
810 #endif
811         enum StdCursor {
812                 Default                         = 0,
813                 AppStarting                     = 1,
814                 Arrow                           = 2,
815                 Cross                           = 3,
816                 Hand                            = 4,
817                 Help                            = 5,
818                 HSplit                          = 6,
819                 IBeam                           = 7,
820                 No                              = 8,
821                 NoMove2D                        = 9,
822                 NoMoveHoriz                     = 10,
823                 NoMoveVert                      = 11,
824                 PanEast                         = 12,
825                 PanNE                           = 13,
826                 PanNorth                        = 14,
827                 PanNW                           = 15,
828                 PanSE                           = 16,
829                 PanSouth                        = 17,
830                 PanSW                           = 18,
831                 PanWest                         = 19,
832                 SizeAll                         = 20,
833                 SizeNESW                        = 21,
834                 SizeNS                          = 22,
835                 SizeNWSE                        = 23,
836                 SizeWE                          = 24,
837                 UpArrow                         = 25,
838                 VSplit                          = 26,
839                 WaitCursor                      = 27
840         }
841
842 #if PUBLIC_TYPES
843         public
844 #else
845         internal
846 #endif
847         enum HitTest {
848                 HTERROR                         = -2,
849                 HTTRANSPARENT                   = -1,
850                 HTNOWHERE                       = 0,
851                 HTCLIENT                        = 1,
852                 HTCAPTION                       = 2,
853                 HTSYSMENU                       = 3,
854                 HTGROWBOX                       = 4,
855                 HTSIZE                          = HTGROWBOX,
856                 HTMENU                          = 5,
857                 HTHSCROLL                       = 6,
858                 HTVSCROLL                       = 7,
859                 HTMINBUTTON                     = 8,
860                 HTMAXBUTTON                     = 9,
861                 HTLEFT                          = 10,
862                 HTRIGHT                         = 11,
863                 HTTOP                           = 12,
864                 HTTOPLEFT                       = 13,
865                 HTTOPRIGHT                      = 14,
866                 HTBOTTOM                        = 15,
867                 HTBOTTOMLEFT                    = 16,
868                 HTBOTTOMRIGHT                   = 17,
869                 HTBORDER                        = 18,
870                 HTREDUCE                        = HTMINBUTTON,
871                 HTZOOM                          = HTMAXBUTTON,
872                 HTSIZEFIRST                     = HTLEFT,
873                 HTSIZELAST                      = HTBOTTOMRIGHT,
874                 HTOBJECT                        = 19,
875                 HTCLOSE                         = 20,
876                 HTHELP                          = 21
877         }
878
879 #if PUBLIC_TYPES
880         public
881 #else
882         internal
883 #endif
884         enum TitleStyle {
885                 None                            = 0,
886                 Normal                          = 1,
887                 Tool                            = 2
888         }
889
890         [StructLayout(LayoutKind.Sequential)]
891 #if PUBLIC_TYPES
892          public
893 #else
894         internal
895 #endif
896         struct BITMAPINFOHEADER {
897                 internal uint     biSize;
898                 internal int      biWidth;
899                 internal int      biHeight;
900                 internal ushort   biPlanes;
901                 internal ushort   biBitCount;
902                 internal uint     biCompression;
903                 internal uint     biSizeImage;
904                 internal int      biXPelsPerMeter;
905                 internal int      biYPelsPerMeter;
906                 internal uint     biClrUsed;
907                 internal uint     biClrImportant;
908         }
909
910 #if PUBLIC_TYPES
911         public
912 #else
913         internal
914 #endif
915         enum ClipboardFormats : ushort {
916                 CF_TEXT                         = 1,
917                 CF_BITMAP                       = 2,
918                 CF_METAFILEPICT                 = 3,
919                 CF_SYLK                         = 4,
920                 CF_DIF                          = 5,
921                 CF_TIFF                         = 6,
922                 CF_OEMTEXT                      = 7,
923                 CF_DIB                          = 8,
924                 CF_PALETTE                      = 9,
925                 CF_PENDATA                      = 10,
926                 CF_RIFF                         = 11,
927                 CF_WAVE                         = 12,
928                 CF_UNICODETEXT                  = 13,
929                 CF_ENHMETAFILE                  = 14,
930                 CF_HDROP                        = 15,
931                 CF_LOCALE                       = 16,
932                 CF_DIBV5                        = 17
933         }
934
935         [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
936 #if PUBLIC_TYPES
937          public
938 #else
939         internal
940 #endif
941         struct MINMAXINFO {
942                 internal POINT                  ptReserved;
943                 internal POINT                  ptMaxSize;
944                 internal POINT                  ptMaxPosition;
945                 internal POINT                  ptMinTrackSize;
946                 internal POINT                  ptMaxTrackSize;
947         }
948
949         [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
950 #if PUBLIC_TYPES
951          public
952 #else
953         internal
954 #endif
955         struct KeyFilterData {
956                         internal bool Down;
957                         internal int keycode;
958                         internal int keysym;
959                         internal Keys ModifierKeys;
960                         internal String str;
961                 }
962
963 #if PUBLIC_TYPES
964         public
965 #else
966         internal
967 #endif
968         enum ScrollBarCommands {
969                 SB_LINEUP               = 0,
970                 SB_LINELEFT             = 0,
971                 SB_LINEDOWN             = 1,
972                 SB_LINERIGHT            = 1,
973                 SB_PAGEUP               = 2,
974                 SB_PAGELEFT             = 2,
975                 SB_PAGEDOWN             = 3,
976                 SB_PAGERIGHT            = 3,
977                 SB_THUMBPOSITION        = 4,
978                 SB_THUMBTRACK           = 5,
979                 SB_TOP                  = 6,
980                 SB_LEFT                 = 6,
981                 SB_BOTTOM               = 7,
982                 SB_RIGHT                = 7,
983                 SB_ENDSCROLL            = 8
984         }
985
986 #if PUBLIC_TYPES
987         public
988 #else
989         internal
990 #endif
991         enum ClipCombineMode {
992                 RGN_AND = 1,
993                 RGN_OR,
994                 RGN_XOR,
995                 RGN_DIFF,
996                 RGN_COPY,
997
998                 RGN_MIN = RGN_AND,
999                 RGN_MAX = RGN_COPY
1000         }
1001
1002 #if PUBLIC_TYPES
1003         public
1004 #else
1005         internal
1006 #endif
1007         enum SystemCommands {
1008                 SC_SIZE         = 0xF000,
1009                 SC_MOVE         = 0xF010,
1010                 SC_MINIMIZE     = 0xF020,
1011                 SC_MAXIMIZE     = 0xF030,
1012                 SC_NEXTWINDOW   = 0xF040,
1013                 SC_PREVWINDOW   = 0xF050,
1014                 SC_CLOSE        = 0xF060,
1015                 SC_VSCROLL      = 0xF070,
1016                 SC_HSCROLL      = 0xF080,
1017                 SC_MOUSEMENU    = 0xF090,
1018                 SC_KEYMENU      = 0xF100,
1019                 SC_ARRANGE      = 0xF110,
1020                 SC_RESTORE      = 0xF120,
1021                 SC_TASKLIST     = 0xF130,
1022                 SC_SCREENSAVE   = 0xF140,
1023                 SC_HOTKEY       = 0xF150,
1024                 SC_DEFAULT      = 0xF160,
1025                 SC_MONITORPOWER = 0xF170,
1026                 SC_CONTEXTHELP  = 0xF180
1027         }
1028
1029 #if PUBLIC_TYPES
1030         public
1031 #else
1032         internal
1033 #endif
1034         enum AlertType {
1035                 Default         = 1,
1036                 Error           = 2,
1037                 Question        = 3,
1038                 Warning         = 4,
1039                 Information     = 5
1040         }
1041 }
1042