WM_COPYDATA 16<->32 bit message mapping

Rein Klazes wijn at wanadoo.nl
Thu May 5 04:51:45 CDT 2005


Hi,

WM_COPY messages are used between 16 bit MS Visual C++ IDE and 32 bit
build tools.

Changelog:

include/wine		: winuser16.h
dlls/user		: winproc.c

Add 16<->32 bit message mappings for WM_COPYDATA messages.

Rein.
-------------- next part --------------
--- wine/include/wine/winuser16.h	2004-01-28 22:41:56.000000000 +0100
+++ mywine/include/wine/winuser16.h	2005-05-05 11:05:08.000000000 +0200
@@ -555,6 +555,13 @@ typedef struct
     LONG       l;
 } DRAGINFO16, *LPDRAGINFO16;
 
+/* undocumented */
+typedef struct tagCOPYDATASTRUCT16 {
+    DWORD dwData;
+    DWORD cbData;
+    SEGPTR lpData;
+} COPYDATASTRUCT16, *PCOPYDATASTRUCT16;
+
 #define DRAGOBJ_PROGRAM    0x0001
 #define DRAGOBJ_DATA       0x0002
 #define DRAGOBJ_DIRECTORY  0x0004
--- wine/dlls/user/winproc.c	2005-04-27 12:23:24.000000000 +0200
+++ mywine/dlls/user/winproc.c	2005-05-05 11:00:46.000000000 +0200
@@ -1298,6 +1298,16 @@ INT WINPROC_MapMsg16To32A( HWND hwnd, UI
             *plparam = (LPARAM)cis;
         }
         return 1;
+    case WM_COPYDATA:
+        {
+            PCOPYDATASTRUCT16 pcds16 =  MapSL(*plparam);
+            PCOPYDATASTRUCT pcds = HeapAlloc ( GetProcessHeap(), 0, sizeof(*pcds));
+            pcds->dwData = pcds16->dwData;
+            pcds->cbData = pcds16->cbData;
+            pcds->lpData = MapSL( pcds16->lpData);
+            *plparam = (LPARAM)pcds;
+        }
+        return 1;
     case WM_DELETEITEM:
         {
             DELETEITEMSTRUCT16* dis16 = MapSL(*plparam);
@@ -1608,6 +1618,7 @@ LRESULT WINPROC_UnmapMsg16To32A( HWND hw
     case WM_COMPAREITEM:
     case WM_DELETEITEM:
     case WM_DRAWITEM:
+    case WM_COPYDATA:
         HeapFree( GetProcessHeap(), 0, (LPVOID)lParam );
         break;
     case WM_MEASUREITEM:
@@ -2124,6 +2135,16 @@ INT WINPROC_MapMsg32ATo16( HWND hwnd, UI
     case WM_VSCROLL:
         *plparam = MAKELPARAM( HIWORD(wParam32), (HWND16)*plparam );
         return 0;
+    case WM_COPYDATA:
+        {
+            PCOPYDATASTRUCT pcds32 = (PCOPYDATASTRUCT) *plparam;
+            PCOPYDATASTRUCT16 pcds = HeapAlloc( GetProcessHeap(), 0, sizeof( *pcds));
+            pcds->dwData = pcds32->dwData;
+            pcds->cbData = pcds32->cbData;
+            pcds->lpData = MapLS( pcds32->lpData);
+            *plparam = MapLS( pcds );
+        }
+        return 1;
     case WM_CTLCOLORMSGBOX:
     case WM_CTLCOLOREDIT:
     case WM_CTLCOLORLISTBOX:
@@ -2510,6 +2531,14 @@ void WINPROC_UnmapMsg32ATo16( HWND hwnd,
             HeapFree( GetProcessHeap(), 0, ptr );
         }
         break;
+    case WM_COPYDATA:
+        {
+            PCOPYDATASTRUCT16 pcds = MapSL( p16->lParam );
+            UnMapLS( p16->lParam );
+            UnMapLS( pcds->lpData );
+            HeapFree( GetProcessHeap(), 0, pcds );
+        }
+        break;
     case CB_GETDROPPEDCONTROLRECT:
     case LB_GETITEMRECT:
         {


More information about the wine-patches mailing list