source: trunk/src/user32/new/pmwindow.cpp@ 693

Last change on this file since 693 was 693, checked in by dengert, 26 years ago

new window size/move code

File size: 18.7 KB
Line 
1/* $Id: pmwindow.cpp,v 1.21 1999-08-25 15:08:50 dengert Exp $ */
2/*
3 * Win32 Window Managment Code for OS/2
4 *
5 * Copyright 1998-1999 Sander van Leeuwen (sandervl@xs4all.nl)
6 * Copyright 1999 Daniela Engert (dani@ngrt.de)
7 *
8 *
9 * Project Odin Software License can be found in LICENSE.TXT
10 *
11 */
12#define INCL_WIN
13#define INCL_GPI
14
15#include <os2.h> /* PM header file */
16#include <os2wrap.h>
17#include <stdlib.h>
18#include "win32type.h"
19#include <winconst.h>
20#include <wprocess.h>
21#include <misc.h>
22#include <win32wnd.h>
23#include <win32dlg.h>
24#include "pmwindow.h"
25#include "oslibwin.h"
26#include "oslibutil.h"
27#include "oslibgdi.h"
28#include "oslibmsg.h"
29
30HMQ hmq = 0; /* Message queue handle */
31HAB hab = 0;
32
33RECTL desktopRectl = {0};
34ULONG ScreenWidth = 0;
35ULONG ScreenHeight = 0;
36
37MRESULT EXPENTRY Win32WindowProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2);
38
39//******************************************************************************
40//Initialize PM; create hab, message queue and register special Win32 window classes
41//******************************************************************************
42BOOL InitPM()
43{
44 hab = WinInitialize(0);
45 dprintf(("Winitialize returned %x", hab));
46 hmq = WinCreateMsgQueue(hab, 0);
47
48 if(!hab || !hmq)
49 {
50 UINT error;
51 //CB: only fail on real error
52 error = WinGetLastError(hab) & 0xFFFF; //error code
53 if (!hab || error != PMERR_MSG_QUEUE_ALREADY_EXISTS)
54 {
55 dprintf(("WinInitialize or WinCreateMsgQueue failed %x %x", hab, hmq));
56 dprintf((" Error = %x",error));
57 return(FALSE);
58 }
59 else
60 {
61 if(!hab) {
62 hab = WinQueryAnchorBlock(HWND_DESKTOP);
63 dprintf(("WinQueryAnchorBlock returned %x", hab));
64 }
65 if(!hmq) {
66 hmq = HMQ_CURRENT;
67 }
68 }
69 }
70 SetThreadHAB(hab);
71 dprintf(("InitPM: hmq = %x", hmq));
72 SetThreadMessageQueue(hmq);
73
74 if(!WinRegisterClass( /* Register window class */
75 hab, /* Anchor block handle */
76 (PSZ)WIN32_STDCLASS, /* Window class name */
77 (PFNWP)Win32WindowProc, /* Address of window procedure */
78 CS_SIZEREDRAW | CS_HITTEST,
79 8)) {
80 dprintf(("WinRegisterClass Win32Window failed"));
81 return(FALSE);
82 }
83
84 WinQueryWindowRect(HWND_DESKTOP, &desktopRectl);
85 ScreenWidth = desktopRectl.xRight;
86 ScreenHeight = desktopRectl.yTop;
87
88 dprintf(("InitPM: Desktop (%d,%d)", ScreenWidth, ScreenHeight));
89 return OSLibInitMsgQueue();
90} /* End of main */
91//******************************************************************************
92//Win32 window message handler
93//******************************************************************************
94MRESULT EXPENTRY Win32WindowProc(HWND hwnd, ULONG msg, MPARAM mp1, MPARAM mp2)
95{
96 POSTMSG_PACKET *postmsg;
97 OSLIBPOINT point, ClientPoint;
98 Win32Window *win32wnd;
99 APIRET rc;
100
101 //Restore our FS selector
102 SetWin32TIB();
103
104 win32wnd = Win32Window::GetWindowFromOS2Handle(hwnd);
105
106 if(msg != WM_CREATE && win32wnd == NULL) {
107 dprintf(("Invalid win32wnd pointer for window %x!!", hwnd));
108 goto RunDefWndProc;
109 }
110 switch( msg )
111 {
112 //internal messages
113 case WM_WIN32_POSTMESSAGEA:
114 postmsg = (POSTMSG_PACKET *)mp1;
115 if(postmsg == NULL) {
116 dprintf(("WM_WIN32_POSTMESSAGEA, postmsg NULL!!"));
117 break;
118 }
119 win32wnd->SendMessageA(postmsg->Msg, postmsg->wParam, postmsg->lParam);
120 free(postmsg);
121 break;
122
123 case WM_WIN32_POSTMESSAGEW:
124 postmsg = (POSTMSG_PACKET *)mp1;
125 if(postmsg == NULL) {
126 dprintf(("WM_WIN32_POSTMESSAGEW, postmsg NULL!!"));
127 break;
128 }
129 win32wnd->SendMessageW(postmsg->Msg, postmsg->wParam, postmsg->lParam);
130 free(postmsg);
131 break;
132
133 //OS/2 msgs
134 case WM_CREATE:
135 //Processing is done in after WinCreateWindow returns
136 dprintf(("OS2: WM_CREATE %x", hwnd));
137 RestoreOS2TIB();
138 return (MRESULT)FALSE;
139
140 case WM_QUIT:
141 dprintf(("OS2: WM_QUIT %x", hwnd));
142 if(win32wnd->MsgQuit()) {
143 goto RunDefWndProc;
144 }
145 break;
146
147 case WM_CLOSE:
148 dprintf(("OS2: WM_CLOSE %x", hwnd));
149 if(win32wnd->MsgClose()) {
150 goto RunDefWndProc;
151 }
152 break;
153
154 case WM_DESTROY:
155 dprintf(("OS2: WM_DESTROY %x", hwnd));
156 if(win32wnd->MsgDestroy()) {
157 goto RunDefWndProc;
158 }
159 break;
160
161 case WM_ENABLE:
162 dprintf(("OS2: WM_ENABLE %x", hwnd));
163 if(win32wnd->MsgEnable((ULONG)mp1)) {
164 goto RunDefWndProc;
165 }
166 break;
167
168 case WM_SHOW:
169 dprintf(("OS2: WM_SHOW %x", hwnd));
170 if(win32wnd->MsgShow((ULONG)mp1)) {
171 goto RunDefWndProc;
172 }
173 break;
174
175 case WM_ADJUSTWINDOWPOS:
176 {
177 PSWP pswp = (PSWP)mp1;
178 SWP swpOld;
179 WINDOWPOS wp;
180 ULONG parentHeight = 0;
181
182 dprintf(("OS2: WM_ADJUSTWINDOWPOS %x %x (%d,%d) (%d,%d)", hwnd, pswp->fl, pswp->x, pswp->y, pswp->cx, pswp->cy));
183
184 WinQueryWindowPos(hwnd, &swpOld);
185
186 if(pswp->fl & (SWP_MOVE | SWP_SIZE)) {
187 parentHeight = (win32wnd->isChild()) ?
188 OSLibGetWindowHeight(win32wnd->getParent()->getOS2WindowHandle())
189 : OSLibQueryScreenHeight();
190 }
191 OSLibMapSWPtoWINDOWPOS(pswp, &wp, &swpOld, parentHeight);
192 wp.hwnd = win32wnd->getWindowHandle();
193 if ((pswp->fl & SWP_ZORDER) && (pswp->hwndInsertBehind > HWND_BOTTOM))
194 {
195 Win32Window *wndAfter = Win32Window::GetWindowFromOS2Handle(pswp->hwndInsertBehind);
196 wp.hwndInsertAfter = wndAfter->getWindowHandle();
197 }
198 win32wnd->MsgPosChanging((LPARAM)&wp);
199 break;
200 }
201
202 case WM_WINDOWPOSCHANGED:
203 {
204 PSWP pswp = (PSWP)mp1;
205 WINDOWPOS wp;
206 ULONG parentHeight = 0;
207
208 dprintf(("OS2: WM_WINDOWPOSCHANGED %x %x (%d,%d) (%d,%d)", hwnd, pswp->fl, pswp->x, pswp->y, pswp->cx, pswp->cy));
209 if(pswp->fl & (SWP_MOVE | SWP_SIZE)) {
210 parentHeight = (win32wnd->isChild()) ?
211 OSLibGetWindowHeight(win32wnd->getParent()->getOS2WindowHandle())
212 : OSLibQueryScreenHeight();
213 }
214 OSLibMapSWPtoWINDOWPOS(pswp, &wp, pswp+1, parentHeight);
215 wp.hwnd = win32wnd->getWindowHandle();
216 if ((pswp->fl & SWP_ZORDER) && (pswp->hwndInsertBehind > HWND_BOTTOM))
217 {
218 Win32Window *wndAfter = Win32Window::GetWindowFromOS2Handle(pswp->hwndInsertBehind);
219 wp.hwndInsertAfter = wndAfter->getWindowHandle();
220 }
221 win32wnd->MsgPosChanged((LPARAM)&wp);
222 break;
223 }
224
225 case WM_ERASEBACKGROUND:
226 {
227 return (MRESULT) FALSE;
228 }
229 case WM_SIZE:
230 {
231 SWP swp;
232
233 rc = WinQueryWindowPos(hwnd, &swp);
234 if(rc == FALSE) {
235 dprintf(("WM_SIZE: WinQueryWindowPos failed!"));
236 break;
237 }
238 dprintf(("OS2: WM_SIZE %x %x (%d,%d) (%d,%d) (%d,%d)", hwnd, swp.fl, swp.x, swp.y, swp.cx, swp.cy, SHORT1FROMMP(mp2), SHORT2FROMMP(mp2)));
239#if 0
240 if(win32wnd->MsgSize(SHORT1FROMMP(mp2), SHORT2FROMMP(mp2),
241 (swp.fl & SWP_MINIMIZE) != 0,
242 (swp.fl & SWP_MAXIMIZE) != 0))
243 {
244 goto RunDefWndProc;
245 }
246#endif
247 break;
248 }
249
250 case WM_ACTIVATE:
251 {
252 HWND hwndActivate = (HWND)mp1;
253
254 dprintf(("OS2: WM_ACTIVATE %x", hwnd));
255 if(WinQueryWindowULong(hwndActivate, OFFSET_WIN32PM_MAGIC) != WIN32PM_MAGIC) {
256 //another (non-win32) application's window
257 //set to NULL (allowed according to win32 SDK) to avoid problems
258 hwndActivate = NULL;
259 }
260 if(win32wnd->MsgActivate(1, hwndActivate)) {
261 goto RunDefWndProc;
262 }
263 break;
264 }
265 case WM_FOCUSCHANGE:
266 dprintf(("OS2: WM_FOCUSCHANGE %x", hwnd));
267 goto RunDefWndProc;
268
269 case WM_SETFOCUS:
270 {
271 HWND hwndFocus = (HWND)mp1;
272
273 dprintf(("OS2: WM_SETFOCUS %x %d", hwnd, mp2));
274 if(WinQueryWindowULong(hwndFocus, OFFSET_WIN32PM_MAGIC) != WIN32PM_MAGIC) {
275 //another (non-win32) application's window
276 //set to NULL (allowed according to win32 SDK) to avoid problems
277 hwndFocus = NULL;
278 }
279 if((ULONG)mp2 == TRUE) {
280 rc = win32wnd->MsgSetFocus(hwndFocus);
281 }
282 else rc = win32wnd->MsgKillFocus(hwndFocus);
283 if(rc) {
284 goto RunDefWndProc;
285 }
286 break;
287 }
288 //**************************************************************************
289 //Mouse messages (OS/2 Window coordinates -> Win32 coordinates relative to screen
290 //**************************************************************************
291 case WM_BUTTON1DOWN:
292 dprintf(("OS2: WM_BUTTON1DOWN %x", hwnd));
293 point.x = (*(POINTS *)&mp1).x;
294 point.y = (*(POINTS *)&mp1).y;
295 ClientPoint.x = point.x;
296 ClientPoint.y = MapOS2ToWin32Y(hwnd, 1, point.y);
297 MapOS2ToWin32Point(OSLIB_HWND_DESKTOP, hwnd, &point);
298 if(win32wnd->MsgButton(BUTTON_LEFTDOWN, point.x, point.y, ClientPoint.x, ClientPoint.y)) {
299 goto RunDefWndProc;
300 }
301 break;
302
303 case WM_BUTTON1UP:
304 dprintf(("OS2: WM_BUTTON1UP %x", hwnd));
305 point.x = (*(POINTS *)&mp1).x;
306 point.y = (*(POINTS *)&mp1).y;
307 ClientPoint.x = point.x;
308 ClientPoint.y = MapOS2ToWin32Y(hwnd, 1, point.y);
309 MapOS2ToWin32Point(OSLIB_HWND_DESKTOP, hwnd, &point);
310 if(win32wnd->MsgButton(BUTTON_LEFTUP, point.x, point.y, ClientPoint.x, ClientPoint.y)) {
311 goto RunDefWndProc;
312 }
313 break;
314 case WM_BUTTON1DBLCLK:
315 point.x = (*(POINTS *)&mp1).x;
316 point.y = (*(POINTS *)&mp1).y;
317 ClientPoint.x = point.x;
318 ClientPoint.y = MapOS2ToWin32Y(hwnd, 1, point.y);
319 MapOS2ToWin32Point(OSLIB_HWND_DESKTOP, hwnd, &point);
320 if(win32wnd->MsgButton(BUTTON_LEFTDBLCLICK, point.x, point.y, ClientPoint.x, ClientPoint.y)) {
321 goto RunDefWndProc;
322 }
323 break;
324 case WM_BUTTON2DOWN:
325 point.x = (*(POINTS *)&mp1).x;
326 point.y = (*(POINTS *)&mp1).y;
327 ClientPoint.x = point.x;
328 ClientPoint.y = MapOS2ToWin32Y(hwnd, 1, point.y);
329 MapOS2ToWin32Point(OSLIB_HWND_DESKTOP, hwnd, &point);
330 if(win32wnd->MsgButton(BUTTON_RIGHTDOWN, point.x, point.y, ClientPoint.x, ClientPoint.y)) {
331 goto RunDefWndProc;
332 }
333 break;
334 case WM_BUTTON2UP:
335 point.x = (*(POINTS *)&mp1).x;
336 point.y = (*(POINTS *)&mp1).y;
337 ClientPoint.x = point.x;
338 ClientPoint.y = MapOS2ToWin32Y(hwnd, 1, point.y);
339 MapOS2ToWin32Point(OSLIB_HWND_DESKTOP, hwnd, &point);
340 if(win32wnd->MsgButton(BUTTON_RIGHTUP, point.x, point.y, ClientPoint.x, ClientPoint.y)) {
341 goto RunDefWndProc;
342 }
343 break;
344 case WM_BUTTON2DBLCLK:
345 point.x = (*(POINTS *)&mp1).x;
346 point.y = (*(POINTS *)&mp1).y;
347 ClientPoint.x = point.x;
348 ClientPoint.y = MapOS2ToWin32Y(hwnd, 1, point.y);
349 MapOS2ToWin32Point(OSLIB_HWND_DESKTOP, hwnd, &point);
350 if(win32wnd->MsgButton(BUTTON_RIGHTDBLCLICK, point.x, point.y, ClientPoint.x, ClientPoint.y)) {
351 goto RunDefWndProc;
352 }
353 break;
354 case WM_BUTTON3DOWN:
355 point.x = (*(POINTS *)&mp1).x;
356 point.y = (*(POINTS *)&mp1).y;
357 ClientPoint.x = point.x;
358 ClientPoint.y = MapOS2ToWin32Y(hwnd, 1, point.y);
359 MapOS2ToWin32Point(OSLIB_HWND_DESKTOP, hwnd, &point);
360 if(win32wnd->MsgButton(BUTTON_MIDDLEDOWN, point.x, point.y, ClientPoint.x, ClientPoint.y)) {
361 goto RunDefWndProc;
362 }
363 break;
364 case WM_BUTTON3UP:
365 point.x = (*(POINTS *)&mp1).x;
366 point.y = (*(POINTS *)&mp1).y;
367 ClientPoint.x = point.x;
368 ClientPoint.y = MapOS2ToWin32Y(hwnd, 1, point.y);
369 MapOS2ToWin32Point(OSLIB_HWND_DESKTOP, hwnd, &point);
370 if(win32wnd->MsgButton(BUTTON_MIDDLEUP, point.x, point.y, ClientPoint.x, ClientPoint.y)) {
371 goto RunDefWndProc;
372 }
373 break;
374 case WM_BUTTON3DBLCLK:
375 point.x = (*(POINTS *)&mp1).x;
376 point.y = (*(POINTS *)&mp1).y;
377 ClientPoint.x = point.x;
378 ClientPoint.y = MapOS2ToWin32Y(hwnd, 1, point.y);
379 MapOS2ToWin32Point(OSLIB_HWND_DESKTOP, hwnd, &point);
380 if(win32wnd->MsgButton(BUTTON_MIDDLEDBLCLICK, point.x, point.y, ClientPoint.x, ClientPoint.y)) {
381 goto RunDefWndProc;
382 }
383 break;
384
385 case WM_BUTTON2MOTIONSTART:
386 case WM_BUTTON2MOTIONEND:
387 case WM_BUTTON2CLICK:
388 case WM_BUTTON1MOTIONSTART:
389 case WM_BUTTON1MOTIONEND:
390 case WM_BUTTON1CLICK:
391 case WM_BUTTON3MOTIONSTART:
392 case WM_BUTTON3MOTIONEND:
393 case WM_BUTTON3CLICK:
394 goto RunDefWndProc;
395
396 case WM_MOUSEMOVE:
397 {
398 ULONG keystate = 0;
399 if(WinGetKeyState(HWND_DESKTOP, VK_BUTTON1))
400 keystate |= WMMOVE_LBUTTON;
401 if(WinGetKeyState(HWND_DESKTOP, VK_BUTTON2))
402 keystate |= WMMOVE_MBUTTON;
403 if(WinGetKeyState(HWND_DESKTOP, VK_BUTTON3))
404 keystate |= WMMOVE_RBUTTON;
405 if(WinGetKeyState(HWND_DESKTOP, VK_SHIFT))
406 keystate |= WMMOVE_SHIFT;
407 if(WinGetKeyState(HWND_DESKTOP, VK_CTRL))
408 keystate |= WMMOVE_CTRL;
409
410 //OS/2 Window coordinates -> Win32 Window coordinates
411 //TODO: What do windows apps that handle this messages return?
412 if(!win32wnd->MsgMouseMove(keystate, SHORT1FROMMP(mp1), MapOS2ToWin32Y(win32wnd, SHORT2FROMMP(mp1)))) {
413 goto RunDefWndProc;
414 }
415 break;
416 }
417
418 //**************************************************************************
419 //Slider messages
420 //**************************************************************************
421 case WM_VSCROLL:
422 case WM_HSCROLL:
423
424 case WM_CONTROL:
425
426 case WM_COMMAND:
427 if(SHORT1FROMMP(mp2) == CMDSRC_MENU) {
428 win32wnd->MsgCommand(CMD_MENU, SHORT1FROMMP(mp1), 0);
429 }
430 if(SHORT1FROMMP(mp2) == CMDSRC_ACCELERATOR) {
431 win32wnd->MsgCommand(CMD_ACCELERATOR, SHORT1FROMMP(mp1), 0);
432 }
433 //todo controls + accelerators
434 break;
435
436 case WM_SYSCOMMAND:
437 {
438 ULONG x = 0, y = 0;
439 ULONG win32sc;
440
441 if(SHORT2FROMMP(mp2) == TRUE) {//syscommand caused by mouse action
442 POINTL pointl;
443 WinQueryPointerPos(HWND_DESKTOP, &pointl);
444 x = pointl.x;
445 y = ScreenHeight - y;
446 }
447 switch(SHORT1FROMMP(mp1)) {
448 case SC_MOVE:
449 win32sc = WIN32SC_MOVE;
450 break;
451 case SC_CLOSE:
452 win32sc = WIN32SC_CLOSE;
453 break;
454 case SC_MAXIMIZE:
455 win32sc = WIN32SC_MAXIMIZE;
456 break;
457 case SC_MINIMIZE:
458 win32sc = WIN32SC_MINIMIZE;
459 break;
460 case SC_NEXTFRAME:
461 case SC_NEXTWINDOW:
462 win32sc = WIN32SC_NEXTWINDOW;
463 break;
464 case SC_RESTORE:
465 win32sc = WIN32SC_RESTORE;
466 break;
467 case SC_TASKMANAGER:
468 win32sc = WIN32SC_TASKLIST;
469 break;
470 default:
471 goto RunDefWndProc;
472 }
473 dprintf(("WM_SYSCOMMAND %x %x (%d,%d)", hwnd, win32sc, x, y));
474 if(win32wnd->MsgSysCommand(win32sc, x, y)) {
475 goto RunDefWndProc;
476 }
477 break;
478 }
479 case WM_CHAR:
480 {
481 ULONG keyflags = 0, vkey = 0;
482 ULONG fl = SHORT1FROMMP(mp1);
483
484 if(!(fl & KC_CHAR)) {
485 dprintf(("WM_CHAR: no valid character code"));
486 goto RunDefWndProc;
487 }
488 if(fl & KC_VIRTUALKEY) {
489 vkey = SHORT2FROMMP(mp2);
490 }
491 if(fl & KC_KEYUP) {
492 keyflags |= KEY_UP;
493 }
494 if(fl & KC_ALT) {
495 keyflags |= KEY_ALTDOWN;
496 }
497 if(fl & KC_PREVDOWN) {
498 keyflags |= KEY_PREVDOWN;
499 }
500 if(fl & KC_DEADKEY) {
501 keyflags |= KEY_DEADKEY;
502 }
503 if(win32wnd->MsgChar(SHORT1FROMMP(mp2), CHAR3FROMMP(mp1), CHAR4FROMMP(mp1), vkey, keyflags)) {
504 goto RunDefWndProc;
505 }
506 break;
507 }
508 case WM_INITMENU:
509 case WM_MENUSELECT:
510 case WM_MENUEND:
511 case WM_NEXTMENU:
512
513 case WM_TIMER:
514 goto RunDefWndProc;
515
516 case WM_SETWINDOWPARAMS:
517 {
518 WNDPARAMS *wndParams = (WNDPARAMS *)mp1;
519
520 dprintf(("OS2: WM_SETWINDOWPARAMS %x", hwnd));
521 if(wndParams->fsStatus & WPM_TEXT) {
522 if(win32wnd->MsgSetText(wndParams->pszText, wndParams->cchText)) {
523 goto RunDefWndProc;
524 }
525 }
526 goto RunDefWndProc;
527 }
528
529 case WM_QUERYWINDOWPARAMS:
530 {
531 PWNDPARAMS wndpars = (PWNDPARAMS)mp1;
532 ULONG textlen;
533 PSZ wintext;
534
535 if(wndpars->fsStatus & (WPM_CCHTEXT | WPM_TEXT)) {
536 if(wndpars->fsStatus & WPM_CCHTEXT)
537 wndpars->cchText = win32wnd->MsgGetTextLength();
538 if(wndpars->fsStatus & WPM_TEXT)
539 wndpars->pszText = win32wnd->MsgGetText();
540 return (MRESULT)TRUE;
541 }
542 goto RunDefWndProc;
543 }
544
545 case WM_PAINT:
546 dprintf(("OS2: WM_PAINT %x", hwnd));
547 if(win32wnd->MsgPaint(0, 0)) {
548 goto RunDefWndProc;
549 }
550 break;
551
552 case WM_HITTEST:
553 if(win32wnd->MsgHitTest((*(POINTS *)&mp1).x, MapOS2ToWin32Y(OSLIB_HWND_DESKTOP, hwnd, (*(POINTS *)&mp1).y))) {
554 goto RunDefWndProc;
555 }
556 break;
557
558 case WM_SYSCOLORCHANGE:
559 case WM_SYSVALUECHANGED:
560 case WM_CALCVALIDRECTS:
561 case WM_SETSELECTION:
562 case WM_PPAINT:
563 case WM_PSETFOCUS:
564 case WM_PSYSCOLORCHANGE:
565 case WM_PSIZE:
566 case WM_PACTIVATE:
567 case WM_PCONTROL:
568 case WM_HELP:
569 case WM_APPTERMINATENOTIFY:
570 case WM_PRESPARAMCHANGED:
571 case WM_DRAWITEM:
572 case WM_MEASUREITEM:
573 case WM_CONTROLPOINTER:
574 case WM_QUERYDLGCODE:
575 case WM_SUBSTITUTESTRING:
576 case WM_MATCHMNEMONIC:
577 case WM_SAVEAPPLICATION:
578 case WM_SEMANTICEVENT:
579 default:
580// dprintf(("OS2: RunDefWndProc msg %x for %x", msg, hwnd));
581 RestoreOS2TIB();
582 return WinDefWindowProc( hwnd, msg, mp1, mp2 );
583 }
584 RestoreOS2TIB();
585 return (MRESULT)FALSE;
586
587RunDefWndProc:
588// dprintf(("OS2: RunDefWndProc msg %x for %x", msg, hwnd));
589 RestoreOS2TIB();
590 return WinDefWindowProc( hwnd, msg, mp1, mp2 );
591} /* End of Win32WindowProc */
592//******************************************************************************
593//******************************************************************************
Note: See TracBrowser for help on using the repository browser.