diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c index 2ffd4f06b39..eb8c0db28e2 100644 --- a/dlls/user/winproc.c +++ b/dlls/user/winproc.c @@ -1298,6 +1298,16 @@ INT WINPROC_MapMsg16To32A( HWND hwnd, UINT16 msg16, WPARAM16 wParam16, UINT *pms *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 hwnd, UINT msg, WPARAM wParam, LPARAM lPar 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, UINT msg32, WPARAM wParam32, 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, UINT msg, WPARAM wParam, LPARAM lParam, 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: { diff --git a/include/wine/winuser16.h b/include/wine/winuser16.h index bb223035641..5734f028cdc 100644 --- a/include/wine/winuser16.h +++ b/include/wine/winuser16.h @@ -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