user: Added fast 16->32 mapping for WM_COPYDATA, WM_GETDLGCODE and WM_NEXTMENU.

This commit is contained in:
Alexandre Julliard 2006-05-26 13:36:57 +02:00
parent 5940fb8c00
commit 67a633b3e7
1 changed files with 37 additions and 55 deletions

View File

@ -760,16 +760,6 @@ static INT WINPROC_MapMsg16To32A( HWND hwnd, UINT16 msg16, WPARAM16 wParam16, UI
*pwparam32 = (WPARAM)HDC_32(wParam16);
*plparam = (LPARAM)WIN_Handle32( LOWORD(*plparam) );
return 0;
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_GETTEXT:
case WM_SETTEXT:
case WM_WININICHANGE:
@ -817,24 +807,6 @@ static INT WINPROC_MapMsg16To32A( HWND hwnd, UINT16 msg16, WPARAM16 wParam16, UI
*plparam = (LPARAM)WIN_Handle32( LOWORD(*plparam) );
}
return 0;
case WM_GETDLGCODE:
if (*plparam)
{
LPMSG16 msg16 = MapSL(*plparam);
LPMSG msg32 = HeapAlloc( GetProcessHeap(), 0, sizeof(MSG) );
if (!msg32) return -1;
msg32->hwnd = WIN_Handle32( msg16->hwnd );
msg32->message = msg16->message;
msg32->wParam = msg16->wParam;
msg32->lParam = msg16->lParam;
msg32->time = msg16->time;
msg32->pt.x = msg16->pt.x;
msg32->pt.y = msg16->pt.y;
*plparam = (LPARAM)msg32;
return 1;
}
else return 0;
case WM_NOTIFY:
*plparam = (LPARAM)MapSL(*plparam);
return 0;
@ -844,16 +816,6 @@ static INT WINPROC_MapMsg16To32A( HWND hwnd, UINT16 msg16, WPARAM16 wParam16, UI
* message queues. */
if (*plparam) *plparam = HTASK_32( *plparam );
return 0;
case WM_NEXTMENU:
{
MDINEXTMENU *next = HeapAlloc( GetProcessHeap(), 0, sizeof(*next) );
if (!next) return -1;
next->hmenuIn = (HMENU)*plparam;
next->hmenuNext = 0;
next->hwndNext = 0;
*plparam = (LPARAM)next;
return 1;
}
case WM_PAINTCLIPBOARD:
case WM_SIZECLIPBOARD:
FIXME_(msg)("message %04x needs translation\n",msg16 );
@ -933,27 +895,10 @@ static LRESULT WINPROC_UnmapMsg16To32A( HWND hwnd, UINT msg, WPARAM wParam, LPAR
{
switch(msg)
{
case WM_COPYDATA:
HeapFree( GetProcessHeap(), 0, (LPVOID)lParam );
break;
case WM_MDIGETACTIVE:
result = MAKELONG( LOWORD(result), (BOOL16)(*(BOOL *)lParam) );
HeapFree( GetProcessHeap(), 0, (BOOL *)lParam );
break;
case WM_GETDLGCODE:
if (lParam)
{
LPMSG msg32 = (LPMSG)lParam;
HeapFree( GetProcessHeap(), 0, msg32 );
}
break;
case WM_NEXTMENU:
{
MDINEXTMENU *next = (MDINEXTMENU *)lParam;
result = MAKELONG( HMENU_16(next->hmenuNext), HWND_16(next->hwndNext) );
HeapFree( GetProcessHeap(), 0, next );
}
break;
}
return result;
}
@ -2402,6 +2347,43 @@ LRESULT WINPROC_CallProc16To32A( winproc_callback_t callback, HWND16 hwnd, UINT1
ret = callback( hwnd32, msg, wParam, (LPARAM)&dis, result, arg );
}
break;
case WM_COPYDATA:
{
COPYDATASTRUCT16 *cds16 = MapSL(lParam);
COPYDATASTRUCT cds;
cds.dwData = cds16->dwData;
cds.cbData = cds16->cbData;
cds.lpData = MapSL(cds16->lpData);
ret = callback( hwnd32, msg, wParam, (LPARAM)&cds, result, arg );
}
break;
case WM_GETDLGCODE:
if (lParam)
{
MSG16 *msg16 = MapSL(lParam);
MSG msg32;
msg32.hwnd = WIN_Handle32( msg16->hwnd );
msg32.message = msg16->message;
msg32.wParam = msg16->wParam;
msg32.lParam = msg16->lParam;
msg32.time = msg16->time;
msg32.pt.x = msg16->pt.x;
msg32.pt.y = msg16->pt.y;
ret = callback( hwnd32, msg, wParam, (LPARAM)&msg32, result, arg );
}
else
ret = callback( hwnd32, msg, wParam, lParam, result, arg );
break;
case WM_NEXTMENU:
{
MDINEXTMENU next;
next.hmenuIn = (HMENU)lParam;
next.hmenuNext = 0;
next.hwndNext = 0;
ret = callback( hwnd32, msg, wParam, (LPARAM)&next, result, arg );
*result = MAKELONG( HMENU_16(next.hmenuNext), HWND_16(next.hwndNext) );
}
break;
default:
{
UINT msg32;