Alexandre Julliard : user: Added fast 16-> 32 mapping for the remaining messages.

Alexandre Julliard julliard at wine.codeweavers.com
Fri May 26 13:54:57 CDT 2006


Module: wine
Branch: refs/heads/master
Commit: 2ea3f3d293dbdee65fdfa6eae9218749e9f651bf
URL:    http://source.winehq.org/git/?p=wine.git;a=commit;h=2ea3f3d293dbdee65fdfa6eae9218749e9f651bf

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Fri May 26 13:44:57 2006 +0200

user: Added fast 16->32 mapping for the remaining messages.

---

 dlls/user/winproc.c |  146 +++++++++++++++++++++------------------------------
 1 files changed, 59 insertions(+), 87 deletions(-)

diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c
index d36f192..64a5a7c 100644
--- a/dlls/user/winproc.c
+++ b/dlls/user/winproc.c
@@ -729,85 +729,6 @@ static UINT convert_handle_16_to_32(HAND
     return (UINT)dst;
 }
 
-/**********************************************************************
- *	     WINPROC_MapMsg16To32A
- *
- * Map a message from 16- to 32-bit Ansi.
- * Return value is -1 on error, 0 if OK, 1 if an UnmapMsg call is needed.
- */
-static INT WINPROC_MapMsg16To32A( HWND hwnd, UINT16 msg16, WPARAM16 wParam16, UINT *pmsg32,
-                                  WPARAM *pwparam32, LPARAM *plparam )
-{
-    *pmsg32 = (UINT)msg16;
-    *pwparam32 = (WPARAM)wParam16;
-    switch(msg16)
-    {
-    case WM_ACTIVATE:
-    case WM_CHARTOITEM:
-    case WM_COMMAND:
-    case WM_VKEYTOITEM:
-        *pwparam32 = MAKEWPARAM( wParam16, HIWORD(*plparam) );
-        *plparam   = (LPARAM)WIN_Handle32( LOWORD(*plparam) );
-        return 0;
-    case WM_HSCROLL:
-    case WM_VSCROLL:
-        *pwparam32 = MAKEWPARAM( wParam16, LOWORD(*plparam) );
-        *plparam   = (LPARAM)WIN_Handle32( HIWORD(*plparam) );
-        return 0;
-    case WM_CTLCOLOR:
-        if ( HIWORD(*plparam) > CTLCOLOR_STATIC ) return -1;
-        *pmsg32    = WM_CTLCOLORMSGBOX + HIWORD(*plparam);
-        *pwparam32 = (WPARAM)HDC_32(wParam16);
-        *plparam   = (LPARAM)WIN_Handle32( LOWORD(*plparam) );
-        return 0;
-    case WM_GETTEXT:
-    case WM_SETTEXT:
-    case WM_WININICHANGE:
-    case WM_DEVMODECHANGE:
-    case WM_ASKCBFORMATNAME:
-        *plparam = (LPARAM)MapSL(*plparam);
-        return 0;
-    case WM_MENUCHAR:
-        *pwparam32 = MAKEWPARAM( wParam16, LOWORD(*plparam) );
-        *plparam   = (LPARAM)HMENU_32(HIWORD(*plparam));
-        return 0;
-    case WM_MENUSELECT:
-        if((LOWORD(*plparam) & MF_POPUP) && (LOWORD(*plparam) != 0xFFFF))
-        {
-            HMENU hmenu=HMENU_32(HIWORD(*plparam));
-            UINT Pos=MENU_FindSubMenu( &hmenu, HMENU_32(wParam16));
-            if(Pos==0xFFFF) Pos=0; /* NO_SELECTED_ITEM */
-            *pwparam32 = MAKEWPARAM( Pos, LOWORD(*plparam) );
-        }
-        else *pwparam32 = MAKEWPARAM( wParam16, LOWORD(*plparam) );
-        *plparam   = (LPARAM)HMENU_32(HIWORD(*plparam));
-        return 0;
-    case WM_PARENTNOTIFY:
-        if ((wParam16 == WM_CREATE) || (wParam16 == WM_DESTROY))
-        {
-            *pwparam32 = MAKEWPARAM( wParam16, HIWORD(*plparam) );
-            *plparam   = (LPARAM)WIN_Handle32( LOWORD(*plparam) );
-        }
-        return 0;
-    case WM_NOTIFY:
-        *plparam = (LPARAM)MapSL(*plparam);
-        return 0;
-    case WM_ACTIVATEAPP:
-        /* We need this when SetActiveWindow sends a Sendmessage16() to
-         * a 32bit window. Might be superflous with 32bit interprocess
-         * message queues. */
-        if (*plparam) *plparam = HTASK_32( *plparam );
-        return 0;
-    case WM_PAINTCLIPBOARD:
-    case WM_SIZECLIPBOARD:
-        FIXME_(msg)("message %04x needs translation\n",msg16 );
-        return -1;
-    default:  /* No translation needed */
-        return 0;
-    }
-}
-
-
 static HANDLE16 convert_handle_32_to_16(UINT src, unsigned int flags)
 {
     HANDLE16    dst;
@@ -2307,6 +2228,60 @@ LRESULT WINPROC_CallProc16To32A( winproc
             *result = MAKELONG( HMENU_16(next.hmenuNext), HWND_16(next.hwndNext) );
         }
         break;
+    case WM_ACTIVATE:
+    case WM_CHARTOITEM:
+    case WM_COMMAND:
+    case WM_VKEYTOITEM:
+        ret = callback( hwnd32, msg, MAKEWPARAM( wParam, HIWORD(lParam) ),
+                        (LPARAM)WIN_Handle32( LOWORD(lParam) ), result, arg );
+        break;
+    case WM_HSCROLL:
+    case WM_VSCROLL:
+        ret = callback( hwnd32, msg, MAKEWPARAM( wParam, LOWORD(lParam) ),
+                        (LPARAM)WIN_Handle32( HIWORD(lParam) ), result, arg );
+        break;
+    case WM_CTLCOLOR:
+        if (HIWORD(lParam) <= CTLCOLOR_STATIC)
+            ret = callback( hwnd32, WM_CTLCOLORMSGBOX + HIWORD(lParam),
+                            (WPARAM)HDC_32(wParam), (LPARAM)WIN_Handle32( LOWORD(lParam) ),
+                            result, arg );
+        break;
+    case WM_GETTEXT:
+    case WM_SETTEXT:
+    case WM_WININICHANGE:
+    case WM_DEVMODECHANGE:
+    case WM_ASKCBFORMATNAME:
+    case WM_NOTIFY:
+        ret = callback( hwnd32, msg, wParam, (LPARAM)MapSL(lParam), result, arg );
+        break;
+    case WM_MENUCHAR:
+        ret = callback( hwnd32, msg, MAKEWPARAM( wParam, LOWORD(lParam) ),
+                        (LPARAM)HMENU_32(HIWORD(lParam)), result, arg );
+        break;
+    case WM_MENUSELECT:
+        if((LOWORD(lParam) & MF_POPUP) && (LOWORD(lParam) != 0xFFFF))
+        {
+            HMENU hmenu = HMENU_32(HIWORD(lParam));
+            UINT pos = MENU_FindSubMenu( &hmenu, HMENU_32(wParam) );
+            if (pos == 0xffff) pos = 0;  /* NO_SELECTED_ITEM */
+            wParam = pos;
+        }
+        ret = callback( hwnd32, msg, MAKEWPARAM( wParam, LOWORD(lParam) ),
+                        (LPARAM)HMENU_32(HIWORD(lParam)), result, arg );
+        break;
+    case WM_PARENTNOTIFY:
+        if ((wParam == WM_CREATE) || (wParam == WM_DESTROY))
+            ret = callback( hwnd32, msg, MAKEWPARAM( wParam, HIWORD(lParam) ),
+                            (LPARAM)WIN_Handle32( LOWORD(lParam) ), result, arg );
+        else
+            ret = callback( hwnd32, msg, wParam, lParam, result, arg );
+        break;
+    case WM_ACTIVATEAPP:
+        /* We need this when SetActiveWindow sends a Sendmessage16() to
+         * a 32bit window. Might be superflous with 32bit interprocess
+         * message queues. */
+        ret = callback( hwnd32, msg, wParam, HTASK_32(lParam), result, arg );
+        break;
     case WM_DDE_INITIATE:
     case WM_DDE_TERMINATE:
     case WM_DDE_UNADVISE:
@@ -2359,15 +2334,12 @@ LRESULT WINPROC_CallProc16To32A( winproc
         lParam = convert_handle_16_to_32( lParam, GMEM_DDESHARE );
         ret = callback( hwnd32, msg, wParam, lParam, result, arg );
         break; /* FIXME don't know how to free allocated memory (handle) !! */
+    case WM_PAINTCLIPBOARD:
+    case WM_SIZECLIPBOARD:
+        FIXME_(msg)( "message %04x needs translation\n", msg );
+        break;
     default:
-        {
-            UINT msg32;
-            WPARAM wParam32;
-            if (WINPROC_MapMsg16To32A( hwnd32, msg, wParam, &msg32, &wParam32, &lParam ) != -1)
-            {
-                ret = callback( hwnd32, msg32, wParam32, lParam, result, arg );
-            }
-        }
+        ret = callback( hwnd32, msg, wParam, lParam, result, arg );
         break;
     }
     return ret;




More information about the wine-cvs mailing list