Alexandre Julliard : user: Added fast 16->32 mapping for WM_CREATE,
WM_NCCREATE and WM_MDICREATE.
Alexandre Julliard
julliard at wine.codeweavers.com
Fri May 26 13:54:56 CDT 2006
Module: wine
Branch: refs/heads/master
Commit: 246f6d11059c616f98076c4a11e14ec4c5dcafe9
URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=246f6d11059c616f98076c4a11e14ec4c5dcafe9
Author: Alexandre Julliard <julliard at winehq.org>
Date: Fri May 26 13:21:31 2006 +0200
user: Added fast 16->32 mapping for WM_CREATE, WM_NCCREATE and WM_MDICREATE.
---
dlls/user/winproc.c | 116 ++++++++++++++++++++-------------------------------
1 files changed, 46 insertions(+), 70 deletions(-)
diff --git a/dlls/user/winproc.c b/dlls/user/winproc.c
index 9b658ed..63985d7 100644
--- a/dlls/user/winproc.c
+++ b/dlls/user/winproc.c
@@ -367,6 +367,8 @@ static void CREATESTRUCT16to32A( const C
to->x = from->x;
to->style = from->style;
to->dwExStyle = from->dwExStyle;
+ to->lpszName = MapSL(from->lpszName);
+ to->lpszClass = MapSL(from->lpszClass);
}
/* The strings are not copied */
@@ -390,6 +392,8 @@ static void MDICREATESTRUCT16to32A( cons
to->cy = from->cy;
to->style = from->style;
to->lParam = from->lParam;
+ to->szTitle = MapSL(from->szTitle);
+ to->szClass = MapSL(from->szClass);
}
static WPARAM map_wparam_char_AtoW( WPARAM wParam, DWORD len )
@@ -832,18 +836,6 @@ static INT WINPROC_MapMsg16To32A( HWND h
case WM_ASKCBFORMATNAME:
*plparam = (LPARAM)MapSL(*plparam);
return 0;
- case WM_MDICREATE:
- {
- MDICREATESTRUCT16 *cs16 = MapSL(*plparam);
- MDICREATESTRUCTA *cs = HeapAlloc( GetProcessHeap(), 0, sizeof(*cs) + sizeof(LPARAM) );
- if (!cs) return -1;
- MDICREATESTRUCT16to32A( cs16, cs );
- cs->szTitle = MapSL(cs16->szTitle);
- cs->szClass = MapSL(cs16->szClass);
- *(LPARAM *)(cs + 1) = *plparam; /* Store the previous lParam */
- *plparam = (LPARAM)cs;
- }
- return 1;
case WM_MDIGETACTIVE:
*plparam = (LPARAM)HeapAlloc( GetProcessHeap(), 0, sizeof(BOOL) );
*(BOOL*)(*plparam) = 0;
@@ -906,36 +898,6 @@ static INT WINPROC_MapMsg16To32A( HWND h
*plparam = (LPARAM)nc;
}
return 1;
- case WM_NCCREATE:
- case WM_CREATE:
- {
- CREATESTRUCT16 *cs16 = MapSL(*plparam);
- CREATESTRUCTA *cs = HeapAlloc( GetProcessHeap(), 0, sizeof(*cs) + sizeof(LPARAM) );
- if (!cs) return -1;
- CREATESTRUCT16to32A( cs16, cs );
- cs->lpszName = MapSL(cs16->lpszName);
- cs->lpszClass = MapSL(cs16->lpszClass);
-
- if (GetWindowLongW(hwnd, GWL_EXSTYLE) & WS_EX_MDICHILD)
- {
- MDICREATESTRUCT16 *mdi_cs16;
- MDICREATESTRUCTA *mdi_cs = HeapAlloc(GetProcessHeap(), 0, sizeof(*mdi_cs));
- if (!mdi_cs)
- {
- HeapFree(GetProcessHeap(), 0, cs);
- return -1;
- }
- mdi_cs16 = (MDICREATESTRUCT16 *)MapSL(cs16->lpCreateParams);
- MDICREATESTRUCT16to32A(mdi_cs16, mdi_cs);
- mdi_cs->szTitle = MapSL(mdi_cs16->szTitle);
- mdi_cs->szClass = MapSL(mdi_cs16->szClass);
-
- cs->lpCreateParams = mdi_cs;
- }
- *(LPARAM *)(cs + 1) = *plparam; /* Store the previous lParam */
- *plparam = (LPARAM)cs;
- }
- return 1;
case WM_PARENTNOTIFY:
if ((wParam16 == WM_CREATE) || (wParam16 == WM_DESTROY))
{
@@ -1094,14 +1056,6 @@ static LRESULT WINPROC_UnmapMsg16To32A(
HeapFree( GetProcessHeap(), 0, mmi );
}
break;
- case WM_MDICREATE:
- {
- MDICREATESTRUCTA *cs = (MDICREATESTRUCTA *)lParam;
- lParam = *(LPARAM *)(cs + 1);
- MDICREATESTRUCT32Ato16( cs, MapSL(lParam) );
- HeapFree( GetProcessHeap(), 0, cs );
- }
- break;
case WM_MDIGETACTIVE:
result = MAKELONG( LOWORD(result), (BOOL16)(*(BOOL *)lParam) );
HeapFree( GetProcessHeap(), 0, (BOOL *)lParam );
@@ -1135,19 +1089,6 @@ static LRESULT WINPROC_UnmapMsg16To32A(
HeapFree( GetProcessHeap(), 0, nc );
}
break;
- case WM_NCCREATE:
- case WM_CREATE:
- {
- CREATESTRUCTA *cs = (CREATESTRUCTA *)lParam;
- lParam = *(LPARAM *)(cs + 1);
- CREATESTRUCT32Ato16( cs, MapSL(lParam) );
-
- if (GetWindowLongW(hwnd, GWL_EXSTYLE) & WS_EX_MDICHILD)
- HeapFree(GetProcessHeap(), 0, cs->lpCreateParams);
-
- HeapFree( GetProcessHeap(), 0, cs );
- }
- break;
case WM_WINDOWPOSCHANGING:
case WM_WINDOWPOSCHANGED:
{
@@ -2477,19 +2418,54 @@ static LRESULT WINPROC_CallProcWtoA( win
LRESULT WINPROC_CallProc16To32A( winproc_callback_t callback, HWND16 hwnd, UINT16 msg,
WPARAM16 wParam, LPARAM lParam, LRESULT *result, void *arg )
{
- LRESULT ret;
- UINT msg32;
- WPARAM wParam32;
+ LRESULT ret = 0;
HWND hwnd32 = WIN_Handle32( hwnd );
TRACE_(msg)("(hwnd=%p,msg=%s,wp=%08x,lp=%08lx)\n",
hwnd32, SPY_GetMsgName(msg, hwnd32), wParam, lParam);
- if (WINPROC_MapMsg16To32A( hwnd32, msg, wParam, &msg32, &wParam32, &lParam ) == -1)
- return 0;
+ switch(msg)
+ {
+ case WM_NCCREATE:
+ case WM_CREATE:
+ {
+ CREATESTRUCT16 *cs16 = MapSL(lParam);
+ CREATESTRUCTA cs;
+ MDICREATESTRUCTA mdi_cs;
- ret = callback( hwnd32, msg32, wParam32, lParam, result, arg );
- *result = WINPROC_UnmapMsg16To32A( hwnd32, msg32, wParam32, lParam, *result );
+ CREATESTRUCT16to32A( cs16, &cs );
+ if (GetWindowLongW(hwnd32, GWL_EXSTYLE) & WS_EX_MDICHILD)
+ {
+ MDICREATESTRUCT16 *mdi_cs16 = MapSL(cs16->lpCreateParams);
+ MDICREATESTRUCT16to32A(mdi_cs16, &mdi_cs);
+ cs.lpCreateParams = &mdi_cs;
+ }
+ ret = callback( hwnd32, msg, wParam, (LPARAM)&cs, result, arg );
+ CREATESTRUCT32Ato16( &cs, cs16 );
+ }
+ break;
+ case WM_MDICREATE:
+ {
+ MDICREATESTRUCT16 *cs16 = MapSL(lParam);
+ MDICREATESTRUCTA cs;
+
+ MDICREATESTRUCT16to32A( cs16, &cs );
+ ret = callback( hwnd32, msg, wParam, (LPARAM)&cs, result, arg );
+ MDICREATESTRUCT32Ato16( &cs, cs16 );
+ }
+ break;
+ default:
+ {
+ UINT msg32;
+ WPARAM wParam32;
+ if (WINPROC_MapMsg16To32A( hwnd32, msg, wParam, &msg32, &wParam32, &lParam ) != -1)
+ {
+ ret = callback( hwnd32, msg32, wParam32, lParam, result, arg );
+ *result = WINPROC_UnmapMsg16To32A( hwnd32, msg32, wParam32, lParam, *result );
+ }
+ }
+ break;
+ }
return ret;
}
More information about the wine-cvs
mailing list