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 
POINTMono.Winforms.POINT431 		public POINT (int x, int y)
432 		{
433 			this.x = x;
434 			this.y = y;
435 		}
436 
ToPointMono.Winforms.POINT437 		public Point ToPoint ()
438 		{
439 			return new Point (x, y);
440 		}
441 
ToStringMono.Winforms.POINT442 		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 
ToStringMono.Winforms.MSG463 		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 
1043