1 jls.loader.provide('jls.win32.Window');
  2 
  3 jls.loader.requireLibrary('jls_win32');
  4 
  5 jls.loader.require('jls.gui.Event');
  6 jls.loader.require('jls.win32.Font');
  7 jls.loader.require('jls.win32.Pen');
  8 jls.loader.require('jls.win32.Brush');
  9 jls.loader.require('jls.win32.Image');
 10 
 11 jls.win32.Window = jls.lang.Class.create(
 12 {
 13     /*
 14      * If the window has the WS_CAPTION style of dwStyle set, the specified name (if non-empty) appears in the window's title bar.
 15      * If the window being created is a control (such as button, static control or edit control), lpszWindowName is used to specify the text of the control.
 16      */
 17     // TODO Make arguments as a parameter object, keep classname?
 18     initialize : function(classname, name, style, x, y, w, h, parent, menuOrId, exStyle, param) {
 19         jls.win32.Window.initializeThreadWindow();
 20         // TODO Keep top level windows and destroy thread window when there is no more top level window
 21         // TODO Add children to parent to avoid garbage collection
 22         if (typeof style == 'undefined') {
 23             style = parent ? jls.win32.Window.WS_CHILD | jls.win32.Window.WS_VISIBLE : jls.win32.Window.WS_OVERLAPPEDWINDOW;
 24         }
 25         this._no = jls.win32.Window._createWindow(classname, name, style, x, y, w, h, (parent ? parent._no : undefined), menuOrId, exStyle, param);
 26         if (this._no == null) {
 27             throw new jls.lang.Exception('Fail to create window');
 28         }
 29         this._dc = null;
 30         this._eventsHandlers = {};
 31     },
 32     isWindowVisible : function() {
 33         return this._no.isWindowVisible();
 34     },
 35     show : function(mode) {
 36         return this._no.show(mode);
 37     },
 38     update : function() {
 39         this._no.update();
 40         return this;
 41     },
 42     validate : function() {
 43         this._no.validateRect();
 44         return this;
 45     },
 46     close : function(mode) {
 47         this.sendMessage(jls.win32.Window.WM_CLOSE, 0, 0);
 48     },
 49     handle : function() {
 50         return this._no.handle();
 51     },
 52     getText : function() {
 53         return this._no.getText();
 54         /*var length = this._no.sendMessage(jls.win32.Window.WM_GETTEXTLENGTH, 0, 0);
 55         if (length <= 0) {
 56             return '';
 57         }
 58         var buffer = jls.lang.ByteBuffer.allocate(length + 1);
 59         var len = this._no.sendMessage(jls.win32.Window.WM_GETTEXT, buffer.capacity(), buffer.byteArray());
 60         if (len <= 0) {
 61             return '';
 62         }
 63         buffer.clear();
 64         buffer.setLimit(len);
 65         return buffer.getString();*/
 66     },
 67     setText : function(text) {
 68         //this.sendMessage(jls.win32.Window.WM_SETTEXT , 0, text, true);
 69         return this._no.setText(text);
 70     },
 71     setIcon : function(icon, size) {
 72     	if (! ((icon instanceof jls.win32.Image) && (icon.getType() == jls.win32.Image.IMAGE_ICON))) {
 73     		throw new jls.lang.Exception();
 74     	}
 75         return this.sendMessage(jls.win32.Window.WM_SETICON, size || jls.win32.Window.ICON_SMALL, icon);
 76     },
 77     setPosition : function(x, y, w, h, uiFlags, insertAfter) {
 78         return this._no.setPosition(x, y, w, h, uiFlags, insertAfter);
 79     },
 80     rect : function(client) {
 81         return this._no.rect(client);
 82     },
 83     setMenu : function(menu) {
 84     	if (! (menu instanceof jls.win32.Menu)) {
 85     		throw new jls.lang.Exception('Invalid menu argument');
 86     	}
 87         return this._no.setMenu(menu._no);
 88     },
 89     /*
 90      * TODO Add capture
 91      * HWND WINAPI SetCapture(HWND hWnd);
 92      * BOOL WINAPI ReleaseCapture(void);
 93      * BOOL WINAPI TrackMouseEvent(LPTRACKMOUSEEVENT lpEventTrack);
 94      * WM_CAPTURECHANGED
 95      */
 96     setCapture : function() {
 97     	this._no.setCapture();
 98     },
 99     trackMouseEvent : function(flags, hoverTime) {
100     	flags = flags || jls.win32.Window.TME_LEAVE;
101         return this._no.trackMouseEvent(flags, hoverTime);
102     },
103     getDeviceContext : function() {
104         if (this._dc == null) {
105             this._dc = new jls.win32.DeviceContext(this);
106         }
107         return this._dc;
108     },
109     postMessage : function(uMsg, wParam, lParam, unicode, sct) {
110         if (jls.win32.Window._hasWin32NativeObject(wParam)) {
111             wParam = wParam._no;
112         }
113         if (jls.win32.Window._hasWin32NativeObject(lParam)) {
114             lParam = lParam._no;
115         }
116         return this._no.postMessage(uMsg, wParam, lParam, unicode, sct);
117     },
118     sendMessage : function(uMsg, wParam, lParam, unicode, sct) {
119         if (jls.win32.Window._hasWin32NativeObject(wParam)) {
120             wParam = wParam._no;
121         }
122         if (jls.win32.Window._hasWin32NativeObject(lParam)) {
123             lParam = lParam._no;
124         }
125         return this._no.sendMessage(uMsg, wParam, lParam, unicode, sct);
126     },
127     setWindowFunction : function(fn) {
128         this._no.setWindowFunction(fn || null);
129         return this;
130     }
131 });
132 
133 Object.extend(jls.win32.Window,
134 {
135     _threadWindow : null,
136     _thread : null,
137     _createWindow : function(classname, name, style, x, y, w, h, parent, menu, exStyle, param) {
138         return jls.win32.Window._threadWindow.sendMessage(jls.win32.Window.WM_CREATE_WINDOW, null, {
139             classname: classname,
140             name: name,
141             style: style,
142             x: x,
143             y: y,
144             w: w,
145             h: h,
146             parent: parent,// || jls.win32.Window._threadWindow,
147             menu: menu,
148             exStyle: exStyle,
149             param: param
150         });
151     },
152     _hasWin32NativeObject : function(obj) {
153         return (obj instanceof jls.win32.Font) || (obj instanceof jls.win32.Brush) || (obj instanceof jls.win32.Pen) || (obj instanceof jls.win32.Image);
154     },
155     invokeAndWait : function(fn) {
156         jls.win32.Window.initializeThreadWindow();
157         return jls.win32.Window._threadWindow.sendMessage(jls.win32.Window.WM_INVOKE, null, {
158             fn: fn
159         });
160     },
161     invokeLater : function(fn) {
162         jls.win32.Window.initializeThreadWindow();
163         jls.win32.Window._threadWindow.postMessage(jls.win32.Window.WM_INVOKE, null, {
164             fn: fn
165         });
166     },
167     releaseCapture : function() {
168     	_native.win32.Window.releaseCapture();
169     },
170     // TODO Move this function elsewhere
171     shellExecute : function(file, showCmd, directory, operation, parameters) {
172     	_native.win32.shellExecute(file/*, showCmd, directory, operation, parameters*/);
173     },
174     splitWord : function(value) {
175     	return [(value >> 16) & 65535, value & 65535];
176     },
177     hiWord : function(value) {
178     	return (value >> 16) & 65535;
179     },
180     loWord : function(value) {
181     	return value & 65535;
182     },
183     makeWord : function(hi, lo) {
184     	return ((hi & 65535) << 16) + (lo & 65535);
185     },
186     getMessageName : function(message, from, prefix) {
187     	from = from || jls.win32.Window;
188     	prefix = prefix || 'WM_';
189         for (var key in from) {
190             if (key.startsWith(prefix) && (from[key] == message)) {
191                 return key;
192             }
193         }
194     	return '0x' + message.toString(16);
195     },
196     initializeThreadWindow : function() {
197         if (jls.win32.Window._threadWindow != null) {
198             return;
199         }
200         _native.win32.registerClass('JLSThreadWindowsClass');
201         jls.win32.Window.WM_CREATE_WINDOW = jls.win32.Window.WM_JS_OBJECT;
202         jls.win32.Window.WM_INVOKE = jls.win32.Window.WM_JS_OBJECT + 1;
203         var mon = new jls.lang.Monitor();
204         jls.win32.Window._thread = new jls.lang.Thread();
205         jls.win32.Window._thread.run = function() {
206             jls.logger.trace('Create window thread');
207             jls.win32.Window._threadWindow = new _native.win32.Window('JLSThreadWindowsClass', '');
208         
209             jls.win32.Window._threadWindow.setWindowFunction(function(iMsg, wParam, lParam) {
210                 if (iMsg == jls.win32.Window.WM_DESTROY) {
211                     jls.logger.debug('Destroying window');
212                     _native.win32.postQuitMessage();
213                     jls.logger.debug('...destroyed');
214                     return false;
215                 }
216                 if (iMsg == jls.win32.Window.WM_CREATE_WINDOW) {
217                     if (typeof lParam == 'object') {
218                         jls.logger.debug('create window...');
219                         var w = new _native.win32.Window(lParam.classname, lParam.name, lParam.style,
220                             lParam.x, lParam.y, lParam.w, lParam.h, lParam.parent, lParam.menu, lParam.exStyle, lParam.param);
221                         jls.logger.debug('...created');
222                         return w;
223                     } else {
224                         jls.logger.debug('invalid lParam type ' + (typeof lParam));
225                     }
226                 }
227                 if (iMsg == jls.win32.Window.WM_INVOKE) {
228                     if ((typeof lParam == 'object') && ('fn' in lParam)) {
229                         jls.logger.debug('Invoke');
230                         return lParam.fn();
231                     } else {
232                         jls.logger.debug('invalid lParam type ' + (typeof lParam));
233                     }
234                 }
235             });
236             mon.notify();
237             
238             jls.logger.debug('Start polling win32 messages');
239             _native.win32.pollMessage();
240             jls.logger.debug('End polling win32 messages');
241         }
242         jls.logger.debug('Start win32 messages polling thread');
243         jls.win32.Window._thread.start();
244         jls.logger.trace('Wait for polling to start...');
245         mon.wait();
246         jls.logger.debug('Window initialized');
247     },
248     destroyThreadWindow : function() {
249         if (jls.win32.Window._threadWindow == null) {
250             return;
251         }
252         jls.win32.Window._threadWindow.sendMessage(jls.win32.Window.WM_DESTROY);
253         jls.win32.Window._threadWindow = null;
254     },
255     loadLibrary : function(name) {
256         return _native.win32.loadLibrary(name);
257     },
258     registerClass : function(name, style, syscolor, icon) {
259         _native.win32.registerClass(
260         		name, false,
261         		style ? style : jls.win32.Window.CS_HREDRAW | jls.win32.Window.CS_VREDRAW,
262         		syscolor ? syscolor : jls.win32.Window.COLOR_BTNFACE,
263         		icon ? icon._no : undefined);
264     },
265 
266     CS_BYTEALIGNCLIENT: 0x1000,
267     CS_BYTEALIGNWINDOW: 0x2000,
268     CS_CLASSDC: 0x0040,
269     CS_DBLCLKS: 0x0008,
270     CS_DROPSHADOW: 0x00020000,
271     CS_GLOBALCLASS: 0x4000,
272     CS_HREDRAW: 0x0002,
273     CS_NOCLOSE: 0x0200,
274     CS_OWNDC: 0x0020,
275     CS_PARENTDC: 0x0080,
276     CS_SAVEBITS: 0x0800,
277     CS_VREDRAW: 0x0001,
278 
279     /*COLOR_3DDKSHADOW: 21,
280     COLOR_3DFACE: 15,
281     COLOR_3DHIGHLIGHT: 20,
282     COLOR_3DHILIGHT: 20,
283     COLOR_3DLIGHT: 22,
284     COLOR_3DSHADOW: 16,
285     COLOR_ACTIVEBORDER: 10,
286     COLOR_ACTIVECAPTION: 2,
287     COLOR_APPWORKSPACE: 12,
288     COLOR_BACKGROUND: 1,*/
289     COLOR_BTNFACE: 15,
290     /*COLOR_BTNHIGHLIGHT: 20,
291     COLOR_BTNHILIGHT: 20,
292     COLOR_BTNSHADOW: 16,
293     COLOR_BTNTEXT: 18,
294     COLOR_CAPTIONTEXT: 9,
295     COLOR_DESKTOP: 1,
296     COLOR_GRADIENTACTIVECAPTION: 27,
297     COLOR_GRADIENTINACTIVECAPTION: 28,
298     COLOR_GRAYTEXT: 17,
299     COLOR_HIGHLIGHT: 13,
300     COLOR_HIGHLIGHTTEXT: 14,
301     COLOR_HOTLIGHT: 26,
302     COLOR_INACTIVEBORDER: 11,
303     COLOR_INACTIVECAPTION: 3,
304     COLOR_INACTIVECAPTIONTEXT: 19,
305     COLOR_INFOBK: 24,
306     COLOR_INFOTEXT: 23,
307     COLOR_MENU: 4,
308     COLOR_MENUHILIGHT: 29,
309     COLOR_MENUBAR: 30,
310     COLOR_MENUTEXT: 7,
311     COLOR_SCROLLBAR: 0,
312     COLOR_WINDOW: 5,
313     COLOR_WINDOWFRAME: 6,
314     COLOR_WINDOWTEXT: 8,*/
315     
316     WS_BORDER                : 0x00800000,
317     WS_CAPTION               : 0x00c00000,
318     WS_CHILD                 : 0x40000000,
319     WS_CHILDWINDOW           : 0x40000000,
320     WS_CLIPCHILDREN          : 0x02000000,
321     WS_CLIPSIBLINGS          : 0x04000000,
322     WS_DISABLED              : 0x08000000,
323     WS_DLGFRAME              : 0x00400000,
324     WS_GROUP                 : 0x00020000,
325     WS_HSCROLL               : 0x00100000,
326     WS_MAXIMIZE              : 0x01000000,
327     WS_MAXIMIZEBOX           : 0x00010000,
328     WS_MINIMIZE              : 0x20000000,
329     WS_MINIMIZEBOX           : 0x00020000,
330     WS_OVERLAPPEDWINDOW      : 0x00cf0000,
331     WS_POPUP                 : 0x80000000,
332     WS_POPUPWINDOW           : 0x80880000,
333     WS_SYSMENU               : 0x00080000,
334     WS_TABSTOP               : 0x00010000,
335     WS_THICKFRAME            : 0x00040000,
336     WS_VISIBLE               : 0x10000000,
337     WS_VSCROLL               : 0x00200000,
338     
339     WS_EX_ACCEPTFILES        : 0x00000010,
340     WS_EX_APPWINDOW          : 0x00040000,
341     WS_EX_CLIENTEDGE         : 0x00000200,
342     WS_EX_COMPOSITED         : 0x02000000,
343     WS_EX_CONTEXTHELP        : 0x00000400,
344     WS_EX_CONTROLPARENT      : 0x00010000,
345     WS_EX_DLGMODALFRAME      : 0x00000001,
346     WS_EX_LAYERED            : 0x00080000,
347     WS_EX_LAYOUTRTL          : 0x00400000,
348     WS_EX_LEFT               : 0x00000000,
349     WS_EX_LEFTSCROLLBAR      : 0x00004000,
350     WS_EX_LTRREADING         : 0x00000000,
351     WS_EX_MDICHILD           : 0x00000040,
352     WS_EX_NOACTIVATE         : 0x08000000,
353     WS_EX_NOINHERITLAYOUT    : 0x00100000,
354     WS_EX_NOPARENTNOTIFY     : 0x00000004,
355     WS_EX_OVERLAPPEDWINDOW   : 0x00000300,
356     WS_EX_PALETTEWINDOW      : 0x00000188,
357     WS_EX_RIGHT              : 0x00001000,
358     WS_EX_RIGHTSCROLLBAR     : 0x00000000,
359     WS_EX_RTLREADING         : 0x00002000,
360     WS_EX_STATICEDGE         : 0x00020000,
361     WS_EX_TOOLWINDOW         : 0x00000080,
362     WS_EX_TOPMOST            : 0x00000008,
363     WS_EX_TRANSPARENT        : 0x00000020,
364     WS_EX_WINDOWEDGE         : 0x00000100,
365     /*
366     WM_CREATE                : 0x00000001,
367     WM_CLOSE                 : 0x00000010,
368     WM_QUIT                  : 0x00000012,
369     WM_DESTROY               : 0x00000002,
370     WM_COMMAND               : 0x00000111,
371     WM_SYSCOMMAND            : 0x00000112,
372     WM_MOUSEMOVE             : 0x00000200,
373     WM_LBUTTONUP             : 0x00000202,
374     WM_LBUTTONDOWN           : 0x00000201,
375     WM_LBUTTONDBLCLK         : 0x00000203,
376     WM_RBUTTONUP             : 0x00000205,
377     WM_RBUTTONDOWN           : 0x00000204,
378     WM_RBUTTONDBLCLK         : 0x00000206,
379     WM_MBUTTONUP             : 0x00000208,
380     WM_MBUTTONDOWN           : 0x00000207,
381     WM_MBUTTONDBLCLK         : 0x00000209,
382     WM_MOVE                  : 0x00000003,
383     WM_SIZE                  : 0x00000005,
384     WM_CHAR                  : 0x00000102,
385     WM_KEYUP                 : 0x00000101,
386     WM_KEYDOWN               : 0x00000100,
387     WM_DROPFILES             : 0x00000233,
388     WM_QUERYENDSESSION       : 0x00000011,
389     WM_SETCURSOR             : 0x00000020,
390     WM_SETFOCUS              : 0x00000007,
391     WM_TIMER                 : 0x00000113,
392     WM_USER                  : 0x00000400,
393     WM_APP                   : 0x00008000,
394     WM_PAINT                 : 0x0000000f,
395     */
396     WM_APP                   : 0x00008000,
397     WM_ACTIVATE              : 0x00000006,
398     WM_ACTIVATEAPP           : 0x0000001c,
399     WM_AFXFIRST              : 0x00000360,
400     WM_AFXLAST               : 0x0000037f,
401     WM_ASKCBFORMATNAME       : 0x0000030c,
402     WM_CANCELJOURNAL         : 0x0000004b,
403     WM_CANCELMODE            : 0x0000001f,
404     WM_CAPTURECHANGED        : 0x00000215,
405     WM_CHANGECBCHAIN         : 0x0000030d,
406     WM_CHAR                  : 0x00000102,
407     WM_CHARTOITEM            : 0x0000002f,
408     WM_CHILDACTIVATE         : 0x00000022,
409     WM_CLEAR                 : 0x00000303,
410     WM_CLOSE                 : 0x00000010,
411     WM_COMMAND               : 0x00000111,
412     WM_COMMNOTIFY            : 0x00000044,
413     WM_COMPACTING            : 0x00000041,
414     WM_COMPAREITEM           : 0x00000039,
415     WM_CONTEXTMENU           : 0x0000007b,
416     WM_COPY                  : 0x00000301,
417     WM_COPYDATA              : 0x0000004a,
418     WM_CREATE                : 0x00000001,
419     WM_CTLCOLORBTN           : 0x00000135,
420     WM_CTLCOLORDLG           : 0x00000136,
421     WM_CTLCOLOREDIT          : 0x00000133,
422     WM_CTLCOLORLISTBOX       : 0x00000134,
423     WM_CTLCOLORMSGBOX        : 0x00000132,
424     WM_CTLCOLORSCROLLBAR     : 0x00000137,
425     WM_CTLCOLORSTATIC        : 0x00000138, // A static control, or an edit control that is read-only or disabled, sends the WM_CTLCOLORSTATIC  message to its parent window when the control is about to be drawn. By responding to this message, the parent window can use the specified device context handle to set the text and background colors of the static control.
426     WM_CUT                   : 0x00000300,
427     WM_DEADCHAR              : 0x00000103,
428     WM_DELETEITEM            : 0x0000002d,
429     WM_DESTROY               : 0x00000002,
430     WM_DESTROYCLIPBOARD      : 0x00000307,
431     WM_DEVICECHANGE          : 0x00000219,
432     WM_DEVMODECHANGE         : 0x0000001b,
433     WM_DISPLAYCHANGE         : 0x0000007e,
434     WM_DRAWCLIPBOARD         : 0x00000308,
435     WM_DRAWITEM              : 0x0000002b,
436     WM_DROPFILES             : 0x00000233,
437     WM_ENABLE                : 0x0000000a,
438     WM_ENDSESSION            : 0x00000016,
439     WM_ENTERIDLE             : 0x00000121,
440     WM_ENTERMENULOOP         : 0x00000211,
441     WM_ENTERSIZEMOVE         : 0x00000231,
442     WM_ERASEBKGND            : 0x00000014,
443     WM_EXITMENULOOP          : 0x00000212,
444     WM_EXITSIZEMOVE          : 0x00000232,
445     WM_FONTCHANGE            : 0x0000001d,
446     WM_GETDLGCODE            : 0x00000087,
447     WM_GETFONT               : 0x00000031,
448     WM_GETHOTKEY             : 0x00000033,
449     WM_GETICON               : 0x0000007f,
450     WM_GETMINMAXINFO         : 0x00000024,
451     WM_GETTEXT               : 0x0000000d,
452     WM_GETTEXTLENGTH         : 0x0000000e,
453     WM_HANDHELDFIRST         : 0x00000358,
454     WM_HANDHELDLAST          : 0x0000035f,
455     WM_HELP                  : 0x00000053,
456     WM_HOTKEY                : 0x00000312,
457     WM_HSCROLL               : 0x00000114,
458     WM_HSCROLLCLIPBOARD      : 0x0000030e,
459     WM_ICONERASEBKGND        : 0x00000027,
460     WM_INITDIALOG            : 0x00000110,
461     WM_INITMENU              : 0x00000116,
462     WM_INITMENUPOPUP         : 0x00000117,
463     WM_INPUTLANGCHANGE       : 0x00000051,
464     WM_INPUTLANGCHANGEREQUEST: 0x00000050,
465     WM_KEYDOWN               : 0x00000100,
466     WM_KEYUP                 : 0x00000101,
467     WM_KILLFOCUS             : 0x00000008,
468     WM_MDIACTIVATE           : 0x00000222,
469     WM_MDICASCADE            : 0x00000227,
470     WM_MDICREATE             : 0x00000220,
471     WM_MDIDESTROY            : 0x00000221,
472     WM_MDIGETACTIVE          : 0x00000229,
473     WM_MDIICONARRANGE        : 0x00000228,
474     WM_MDIMAXIMIZE           : 0x00000225,
475     WM_MDINEXT               : 0x00000224,
476     WM_MDIREFRESHMENU        : 0x00000234,
477     WM_MDIRESTORE            : 0x00000223,
478     WM_MDISETMENU            : 0x00000230,
479     WM_MDITILE               : 0x00000226,
480     WM_MEASUREITEM           : 0x0000002c,
481     WM_MENUCHAR              : 0x00000120,
482     WM_MENUSELECT            : 0x0000011f,
483     WM_NEXTMENU              : 0x00000213,
484     WM_MOVE                  : 0x00000003,
485     WM_MOVING                : 0x00000216,
486     WM_NCACTIVATE            : 0x00000086,
487     WM_NCCALCSIZE            : 0x00000083,
488     WM_NCCREATE              : 0x00000081,
489     WM_NCDESTROY             : 0x00000082,
490     WM_NCHITTEST             : 0x00000084,
491     WM_NCLBUTTONDBLCLK       : 0x000000a3,
492     WM_NCLBUTTONDOWN         : 0x000000a1,
493     WM_NCLBUTTONUP           : 0x000000a2,
494     WM_NCMBUTTONDBLCLK       : 0x000000a9,
495     WM_NCMBUTTONDOWN         : 0x000000a7,
496     WM_NCMBUTTONUP           : 0x000000a8,
497     WM_NCMOUSEMOVE           : 0x000000a0,
498     WM_NCPAINT               : 0x00000085,
499     WM_NCRBUTTONDBLCLK       : 0x000000a6,
500     WM_NCRBUTTONDOWN         : 0x000000a4,
501     WM_NCRBUTTONUP           : 0x000000a5,
502     WM_NEXTDLGCTL            : 0x00000028,
503     WM_NEXTMENU              : 0x00000213,
504     WM_NOTIFY                : 0x0000004e,
505     WM_NOTIFYFORMAT          : 0x00000055,
506     WM_NULL                  : 0x00000000,
507     WM_PAINT                 : 0x0000000f,
508     WM_PAINTCLIPBOARD        : 0x00000309,
509     WM_PAINTICON             : 0x00000026,
510     WM_PALETTECHANGED        : 0x00000311,
511     WM_PALETTEISCHANGING     : 0x00000310,
512     WM_PARENTNOTIFY          : 0x00000210,
513     WM_PASTE                 : 0x00000302,
514     WM_PENWINFIRST           : 0x00000380,
515     WM_PENWINLAST            : 0x0000038f,
516     WM_POWER                 : 0x00000048,
517     WM_POWERBROADCAST        : 0x00000218,
518     WM_PRINT                 : 0x00000317,
519     WM_PRINTCLIENT           : 0x00000318,
520     WM_QUERYDRAGICON         : 0x00000037,
521     WM_QUERYENDSESSION       : 0x00000011,
522     WM_QUERYNEWPALETTE       : 0x0000030f,
523     WM_QUERYOPEN             : 0x00000013,
524     WM_QUEUESYNC             : 0x00000023,
525     WM_QUIT                  : 0x00000012,
526     WM_RENDERALLFORMATS      : 0x00000306,
527     WM_RENDERFORMAT          : 0x00000305,
528     WM_SETCURSOR             : 0x00000020,
529     WM_SETFOCUS              : 0x00000007,
530     WM_SETFONT               : 0x00000030,
531     WM_SETHOTKEY             : 0x00000032,
532     WM_SETICON               : 0x00000080,
533     WM_SETREDRAW             : 0x0000000b,
534     WM_SETTEXT               : 0x0000000c,
535     WM_SETTINGCHANGE         : 0x0000001a,
536     WM_SHOWWINDOW            : 0x00000018,
537     WM_SIZE                  : 0x00000005,
538     WM_SIZECLIPBOARD         : 0x0000030b,
539     WM_SIZING                : 0x00000214,
540     WM_SPOOLERSTATUS         : 0x0000002a,
541     WM_STYLECHANGED          : 0x0000007d,
542     WM_STYLECHANGING         : 0x0000007c,
543     WM_SYSCHAR               : 0x00000106,
544     WM_SYSCOLORCHANGE        : 0x00000015,
545     WM_SYSCOMMAND            : 0x00000112,
546     WM_SYSDEADCHAR           : 0x00000107,
547     WM_SYSKEYDOWN            : 0x00000104,
548     WM_SYSKEYUP              : 0x00000105,
549     WM_TCARD                 : 0x00000052,
550     WM_THEMECHANGED          : 0x0000031a,
551     WM_TIMECHANGE            : 0x0000001e,
552     WM_TIMER                 : 0x00000113,
553     WM_UNDO                  : 0x00000304,
554     WM_USER                  : 0x00000400,
555     WM_USERCHANGED           : 0x00000054,
556     WM_VKEYTOITEM            : 0x0000002e,
557     WM_VSCROLL               : 0x00000115,
558     WM_VSCROLLCLIPBOARD      : 0x0000030a,
559     WM_WINDOWPOSCHANGED      : 0x00000047,
560     WM_WINDOWPOSCHANGING     : 0x00000046,
561     WM_WININICHANGE          : 0x0000001a,
562     WM_KEYFIRST              : 0x00000100,
563     WM_KEYLAST               : 0x00000108,
564     WM_SYNCPAINT             : 0x00000088,
565     WM_MOUSEACTIVATE         : 0x00000021,
566     WM_MOUSEMOVE             : 0x00000200,
567     WM_LBUTTONDOWN           : 0x00000201,
568     WM_LBUTTONUP             : 0x00000202,
569     WM_LBUTTONDBLCLK         : 0x00000203,
570     WM_RBUTTONDOWN           : 0x00000204,
571     WM_RBUTTONUP             : 0x00000205,
572     WM_RBUTTONDBLCLK         : 0x00000206,
573     WM_MBUTTONDOWN           : 0x00000207,
574     WM_MBUTTONUP             : 0x00000208,
575     WM_MBUTTONDBLCLK         : 0x00000209,
576     WM_MOUSEWHEEL            : 0x0000020a,
577     WM_MOUSEFIRST            : 0x00000200,
578     WM_MOUSELAST             : 0x0000020a,
579     WM_MOUSELAST             : 0x0000020a,
580     WM_MOUSEHOVER            : 0x000002a1,
581     WM_MOUSELEAVE            : 0x000002a3,
582     
583     TME_CANCEL               : 0x80000000,
584     TME_HOVER                : 0x00000001,
585     TME_LEAVE                : 0x00000002,
586     TME_NONCLIENT            : 0x00000010,
587     TME_QUERY                : 0x40000000,
588     
589     ICON_BIG                 : 1,
590     ICON_SMALL               : 0,
591     
592     MK_CONTROL               : 0x0008,
593     MK_LBUTTON               : 0x0001,
594     MK_MBUTTON               : 0x0010,
595     MK_RBUTTON               : 0x0002,
596     MK_SHIFT                 : 0x0004,
597     MK_XBUTTON1              : 0x0020,
598     MK_XBUTTON2              : 0x0040,
599 
600     CW_USEDEFAULT            : 0x80000000
601 });
602 
603 Object.inheritConstants(jls.win32.Window, _native.win32.Window);
604 
605 /*
606 WC_BUTTON                : 'Button',
607 WC_STATIC                : 'Static',
608 WC_EDIT                  : 'Edit',
609 WC_LISTBOX               : 'ListBox',
610 WC_COMBOBOX              : 'ComboBox',
611 WC_SCROLLBAR             : 'ScrollBar',
612 WC_COMBOBOXEX            : 'ComboBoxEx32',
613 WC_HEADER                : 'SysHeader32',
614 WC_IPADDRESS             : 'SysIPAddress32',
615 WC_LISTVIEW              : 'SysListView32',
616 WC_TABCONTROL            : 'SysTabControl32',
617 WC_TREEVIEW              : 'SysTreeView32',
618 WC_PAGESCROLLER          : 'SysPager',
619 WC_NATIVEFONTCTL         : 'NativeFontCtl',
620 RICHEDIT_CLASS           : 'RichEdit20A',
621 PROGRESS_CLASS           : 'msctls_progress32',
622 TRACKBAR_CLASS           : 'msctls_trackbar32',
623 TOOLTIPS_CLASS           : 'tooltips_class32',
624 */