Made access to the wnd struct thread-safe.
diff --git a/controls/listbox.c b/controls/listbox.c
index 1c17bef..a298ff9 100644
--- a/controls/listbox.c
+++ b/controls/listbox.c
@@ -2120,19 +2120,26 @@
LRESULT ret;
LB_DESCR *descr;
WND *wnd = WIN_FindWndPtr( hwnd );
+ LRESULT retvalue;
if (!wnd) return 0;
if (!(descr = *(LB_DESCR **)wnd->wExtra))
{
if (msg == WM_CREATE)
{
- if (!LISTBOX_Create( wnd, NULL )) return -1;
+ if (!LISTBOX_Create( wnd, NULL ))
+ {
+ retvalue = -1;
+ goto END;
+ }
TRACE(listbox, "creating wnd=%04x descr=%p\n",
hwnd, *(LB_DESCR **)wnd->wExtra );
- return 0;
+ retvalue = 0;
+ goto END;
}
/* Ignore all other messages before we get a WM_CREATE */
- return DefWindowProcA( hwnd, msg, wParam, lParam );
+ retvalue = DefWindowProcA( hwnd, msg, wParam, lParam );
+ goto END;
}
TRACE(listbox, "[%04x]: msg %s wp %08x lp %08lx\n",
@@ -2142,104 +2149,133 @@
case LB_RESETCONTENT16:
case LB_RESETCONTENT:
LISTBOX_ResetContent( wnd, descr );
- return 0;
+ retvalue = 0;
+ goto END;
case LB_ADDSTRING16:
if (HAS_STRINGS(descr)) lParam = (LPARAM)PTR_SEG_TO_LIN(lParam);
/* fall through */
case LB_ADDSTRING:
wParam = LISTBOX_FindStringPos( wnd, descr, (LPCSTR)lParam, FALSE );
- return LISTBOX_InsertString( wnd, descr, wParam, (LPCSTR)lParam );
+ retvalue = LISTBOX_InsertString( wnd, descr, wParam, (LPCSTR)lParam );
+ goto END;
case LB_INSERTSTRING16:
if (HAS_STRINGS(descr)) lParam = (LPARAM)PTR_SEG_TO_LIN(lParam);
wParam = (INT)(INT16)wParam;
/* fall through */
case LB_INSERTSTRING:
- return LISTBOX_InsertString( wnd, descr, wParam, (LPCSTR)lParam );
+ retvalue = LISTBOX_InsertString( wnd, descr, wParam, (LPCSTR)lParam );
+ goto END;
case LB_ADDFILE16:
if (HAS_STRINGS(descr)) lParam = (LPARAM)PTR_SEG_TO_LIN(lParam);
/* fall through */
case LB_ADDFILE:
wParam = LISTBOX_FindFileStrPos( wnd, descr, (LPCSTR)lParam );
- return LISTBOX_InsertString( wnd, descr, wParam, (LPCSTR)lParam );
+ retvalue = LISTBOX_InsertString( wnd, descr, wParam, (LPCSTR)lParam );
+ goto END;
case LB_DELETESTRING16:
case LB_DELETESTRING:
- return LISTBOX_RemoveItem( wnd, descr, wParam );
+ retvalue = LISTBOX_RemoveItem( wnd, descr, wParam );
+ goto END;
case LB_GETITEMDATA16:
case LB_GETITEMDATA:
if (((INT)wParam < 0) || ((INT)wParam >= descr->nb_items))
- return LB_ERR;
- return descr->items[wParam].data;
+ {
+ retvalue = LB_ERR;
+ goto END;
+ }
+ retvalue = descr->items[wParam].data;
+ goto END;
case LB_SETITEMDATA16:
case LB_SETITEMDATA:
if (((INT)wParam < 0) || ((INT)wParam >= descr->nb_items))
- return LB_ERR;
+ {
+ retvalue = LB_ERR;
+ goto END;
+ }
descr->items[wParam].data = (DWORD)lParam;
- return LB_OKAY;
+ retvalue = LB_OKAY;
+ goto END;
case LB_GETCOUNT16:
case LB_GETCOUNT:
- return descr->nb_items;
+ retvalue = descr->nb_items;
+ goto END;
case LB_GETTEXT16:
lParam = (LPARAM)PTR_SEG_TO_LIN(lParam);
/* fall through */
case LB_GETTEXT:
- return LISTBOX_GetText( wnd, descr, wParam, (LPSTR)lParam );
+ retvalue = LISTBOX_GetText( wnd, descr, wParam, (LPSTR)lParam );
+ goto END;
case LB_GETTEXTLEN16:
/* fall through */
case LB_GETTEXTLEN:
- if (wParam >= descr->nb_items) return LB_ERR;
- return (HAS_STRINGS(descr) ? strlen(descr->items[wParam].str)
+ if (wParam >= descr->nb_items)
+ {
+ retvalue = LB_ERR;
+ goto END;
+ }
+ retvalue = (HAS_STRINGS(descr) ? strlen(descr->items[wParam].str)
: sizeof(DWORD));
+ goto END;
case LB_GETCURSEL16:
case LB_GETCURSEL:
- return descr->selected_item;
+ retvalue = descr->selected_item;
+ goto END;
case LB_GETTOPINDEX16:
case LB_GETTOPINDEX:
- return descr->top_item;
+ retvalue = descr->top_item;
+ goto END;
case LB_GETITEMHEIGHT16:
case LB_GETITEMHEIGHT:
- return LISTBOX_GetItemHeight( wnd, descr, wParam );
+ retvalue = LISTBOX_GetItemHeight( wnd, descr, wParam );
+ goto END;
case LB_SETITEMHEIGHT16:
lParam = LOWORD(lParam);
/* fall through */
case LB_SETITEMHEIGHT:
- return LISTBOX_SetItemHeight( wnd, descr, wParam, lParam );
+ retvalue = LISTBOX_SetItemHeight( wnd, descr, wParam, lParam );
+ goto END;
case LB_ITEMFROMPOINT:
{
POINT pt = { LOWORD(lParam), HIWORD(lParam) };
RECT rect = { 0, 0, descr->width, descr->height };
- return MAKELONG( LISTBOX_GetItemFromPoint(wnd, descr, pt.x, pt.y),
+ retvalue = MAKELONG( LISTBOX_GetItemFromPoint(wnd, descr, pt.x, pt.y),
PtInRect( &rect, pt ) );
+ goto END;
}
case LB_SETCARETINDEX16:
case LB_SETCARETINDEX:
- return LISTBOX_SetCaretIndex( wnd, descr, wParam, !lParam );
+ retvalue = LISTBOX_SetCaretIndex( wnd, descr, wParam, !lParam );
+ goto END;
case LB_GETCARETINDEX16:
case LB_GETCARETINDEX:
- return descr->focus_item;
+ retvalue = descr->focus_item;
+ goto END;
case LB_SETTOPINDEX16:
case LB_SETTOPINDEX:
- return LISTBOX_SetTopItem( wnd, descr, wParam, TRUE );
+ retvalue = LISTBOX_SetTopItem( wnd, descr, wParam, TRUE );
+ goto END;
case LB_SETCOLUMNWIDTH16:
case LB_SETCOLUMNWIDTH:
- return LISTBOX_SetColumnWidth( wnd, descr, wParam );
+ retvalue = LISTBOX_SetColumnWidth( wnd, descr, wParam );
+ goto END;
case LB_GETITEMRECT16:
{
@@ -2247,24 +2283,28 @@
ret = LISTBOX_GetItemRect( wnd, descr, (INT16)wParam, &rect );
CONV_RECT32TO16( &rect, (RECT16 *)PTR_SEG_TO_LIN(lParam) );
}
- return ret;
+ retvalue = ret;
+ goto END;
case LB_GETITEMRECT:
- return LISTBOX_GetItemRect( wnd, descr, wParam, (RECT *)lParam );
+ retvalue = LISTBOX_GetItemRect( wnd, descr, wParam, (RECT *)lParam );
+ goto END;
case LB_FINDSTRING16:
wParam = (INT)(INT16)wParam;
if (HAS_STRINGS(descr)) lParam = (LPARAM)PTR_SEG_TO_LIN(lParam);
/* fall through */
case LB_FINDSTRING:
- return LISTBOX_FindString( wnd, descr, wParam, (LPCSTR)lParam, FALSE );
+ retvalue = LISTBOX_FindString( wnd, descr, wParam, (LPCSTR)lParam, FALSE );
+ goto END;
case LB_FINDSTRINGEXACT16:
wParam = (INT)(INT16)wParam;
if (HAS_STRINGS(descr)) lParam = (LPARAM)PTR_SEG_TO_LIN(lParam);
/* fall through */
case LB_FINDSTRINGEXACT:
- return LISTBOX_FindString( wnd, descr, wParam, (LPCSTR)lParam, TRUE );
+ retvalue = LISTBOX_FindString( wnd, descr, wParam, (LPCSTR)lParam, TRUE );
+ goto END;
case LB_SELECTSTRING16:
wParam = (INT)(INT16)wParam;
@@ -2274,9 +2314,14 @@
{
INT index = LISTBOX_FindString( wnd, descr, wParam,
(LPCSTR)lParam, FALSE );
- if (index == LB_ERR) return LB_ERR;
+ if (index == LB_ERR)
+ {
+ retvalue = LB_ERR;
+ goto END;
+ }
LISTBOX_SetSelection( wnd, descr, index, TRUE, FALSE );
- return index;
+ retvalue = index;
+ goto END;
}
case LB_GETSEL16:
@@ -2284,128 +2329,171 @@
/* fall through */
case LB_GETSEL:
if (((INT)wParam < 0) || ((INT)wParam >= descr->nb_items))
- return LB_ERR;
- return descr->items[wParam].selected;
+ {
+ retvalue = LB_ERR;
+ goto END;
+ }
+ retvalue = descr->items[wParam].selected;
+ goto END;
case LB_SETSEL16:
lParam = (INT)(INT16)lParam;
/* fall through */
case LB_SETSEL:
- return LISTBOX_SetSelection( wnd, descr, lParam, wParam, FALSE );
+ retvalue = LISTBOX_SetSelection( wnd, descr, lParam, wParam, FALSE );
+ goto END;
case LB_SETCURSEL16:
wParam = (INT)(INT16)wParam;
/* fall through */
case LB_SETCURSEL:
LISTBOX_SetCaretIndex( wnd, descr, wParam, TRUE );
- return LISTBOX_SetSelection( wnd, descr, wParam, TRUE, FALSE );
+ retvalue = LISTBOX_SetSelection( wnd, descr, wParam, TRUE, FALSE );
+ goto END;
case LB_GETSELCOUNT16:
case LB_GETSELCOUNT:
- return LISTBOX_GetSelCount( wnd, descr );
+ retvalue = LISTBOX_GetSelCount( wnd, descr );
+ goto END;
case LB_GETSELITEMS16:
- return LISTBOX_GetSelItems16( wnd, descr, wParam,
+ retvalue = LISTBOX_GetSelItems16( wnd, descr, wParam,
(LPINT16)PTR_SEG_TO_LIN(lParam) );
+ goto END;
case LB_GETSELITEMS:
- return LISTBOX_GetSelItems( wnd, descr, wParam, (LPINT)lParam );
+ retvalue = LISTBOX_GetSelItems( wnd, descr, wParam, (LPINT)lParam );
+ goto END;
case LB_SELITEMRANGE16:
case LB_SELITEMRANGE:
if (LOWORD(lParam) <= HIWORD(lParam))
- return LISTBOX_SelectItemRange( wnd, descr, LOWORD(lParam),
+ {
+ retvalue = LISTBOX_SelectItemRange( wnd, descr, LOWORD(lParam),
HIWORD(lParam), wParam );
+ }
else
- return LISTBOX_SelectItemRange( wnd, descr, HIWORD(lParam),
+ {
+ retvalue = LISTBOX_SelectItemRange( wnd, descr, HIWORD(lParam),
LOWORD(lParam), wParam );
+ }
+ goto END;
case LB_SELITEMRANGEEX16:
case LB_SELITEMRANGEEX:
if ((INT)lParam >= (INT)wParam)
- return LISTBOX_SelectItemRange( wnd, descr, wParam, lParam, TRUE );
+ retvalue = LISTBOX_SelectItemRange( wnd, descr, wParam, lParam, TRUE );
else
- return LISTBOX_SelectItemRange( wnd, descr, lParam, wParam, FALSE);
+ retvalue = LISTBOX_SelectItemRange( wnd, descr, lParam, wParam, FALSE);
+ goto END;
case LB_GETHORIZONTALEXTENT16:
case LB_GETHORIZONTALEXTENT:
- return descr->horz_extent;
+ retvalue = descr->horz_extent;
+ goto END;
case LB_SETHORIZONTALEXTENT16:
case LB_SETHORIZONTALEXTENT:
- return LISTBOX_SetHorizontalExtent( wnd, descr, wParam );
+ retvalue = LISTBOX_SetHorizontalExtent( wnd, descr, wParam );
+ goto END;
case LB_GETANCHORINDEX16:
case LB_GETANCHORINDEX:
- return descr->anchor_item;
+ retvalue = descr->anchor_item;
+ goto END;
case LB_SETANCHORINDEX16:
wParam = (INT)(INT16)wParam;
/* fall through */
case LB_SETANCHORINDEX:
if (((INT)wParam < -1) || ((INT)wParam >= descr->nb_items))
- return LB_ERR;
+ {
+ retvalue = LB_ERR;
+ goto END;
+ }
descr->anchor_item = (INT)wParam;
- return LB_OKAY;
+ retvalue = LB_OKAY;
+ goto END;
case LB_DIR16:
- return LISTBOX_Directory( wnd, descr, wParam,
+ retvalue = LISTBOX_Directory( wnd, descr, wParam,
(LPCSTR)PTR_SEG_TO_LIN(lParam), FALSE );
+ goto END;
case LB_DIR:
- return LISTBOX_Directory( wnd, descr, wParam, (LPCSTR)lParam, TRUE );
+ retvalue = LISTBOX_Directory( wnd, descr, wParam, (LPCSTR)lParam, TRUE );
+ goto END;
case LB_GETLOCALE:
- return descr->locale;
+ retvalue = descr->locale;
+ goto END;
case LB_SETLOCALE:
descr->locale = (LCID)wParam; /* FIXME: should check for valid lcid */
- return LB_OKAY;
+ retvalue = LB_OKAY;
+ goto END;
case LB_INITSTORAGE:
- return LISTBOX_InitStorage( wnd, descr, wParam, (DWORD)lParam );
+ retvalue = LISTBOX_InitStorage( wnd, descr, wParam, (DWORD)lParam );
+ goto END;
case LB_SETCOUNT:
- return LISTBOX_SetCount( wnd, descr, (INT)wParam );
+ retvalue = LISTBOX_SetCount( wnd, descr, (INT)wParam );
+ goto END;
case LB_SETTABSTOPS16:
- return LISTBOX_SetTabStops( wnd, descr, (INT)(INT16)wParam,
+ retvalue = LISTBOX_SetTabStops( wnd, descr, (INT)(INT16)wParam,
(LPINT)PTR_SEG_TO_LIN(lParam), TRUE );
+ goto END;
case LB_SETTABSTOPS:
- return LISTBOX_SetTabStops( wnd, descr, wParam,
+ retvalue = LISTBOX_SetTabStops( wnd, descr, wParam,
(LPINT)lParam, FALSE );
+ goto END;
case LB_CARETON16:
case LB_CARETON:
- if (descr->caret_on) return LB_OKAY;
+ if (descr->caret_on)
+ {
+ retvalue = LB_OKAY;
+ goto END;
+ }
descr->caret_on = TRUE;
if ((descr->focus_item != -1) && (GetFocus() == wnd->hwndSelf))
LISTBOX_RepaintItem( wnd, descr, descr->focus_item, ODA_FOCUS );
- return LB_OKAY;
+ retvalue = LB_OKAY;
+ goto END;
case LB_CARETOFF16:
case LB_CARETOFF:
- if (!descr->caret_on) return LB_OKAY;
+ if (!descr->caret_on)
+ {
+ retvalue = LB_OKAY;
+ goto END;
+ }
descr->caret_on = FALSE;
if ((descr->focus_item != -1) && (GetFocus() == wnd->hwndSelf))
LISTBOX_RepaintItem( wnd, descr, descr->focus_item, ODA_FOCUS );
- return LB_OKAY;
+ retvalue = LB_OKAY;
+ goto END;
case WM_DESTROY:
- return LISTBOX_Destroy( wnd, descr );
+ retvalue = LISTBOX_Destroy( wnd, descr );
+ goto END;
case WM_ENABLE:
InvalidateRect( hwnd, NULL, TRUE );
- return 0;
+ retvalue = 0;
+ goto END;
case WM_SETREDRAW:
LISTBOX_SetRedraw( wnd, descr, wParam != 0 );
- return 0;
+ retvalue = 0;
+ goto END;
case WM_GETDLGCODE:
- return DLGC_WANTARROWS | DLGC_WANTCHARS;
-
+ retvalue =DLGC_WANTARROWS | DLGC_WANTCHARS;
+ goto END;
case WM_PAINT:
{
PAINTSTRUCT ps;
@@ -2414,67 +2502,67 @@
ret = LISTBOX_Paint( wnd, descr, hdc );
if( !wParam ) EndPaint( hwnd, &ps );
}
- return ret;
-
+ retvalue =ret;
+ goto END;
case WM_SIZE:
LISTBOX_UpdateSize( wnd, descr );
- return 0;
-
+ retvalue =0;
+ goto END;
case WM_GETFONT:
- return descr->font;
-
+ retvalue =descr->font;
+ goto END;
case WM_SETFONT:
LISTBOX_SetFont( wnd, descr, (HFONT)wParam );
if (lParam) InvalidateRect( wnd->hwndSelf, 0, TRUE );
- return 0;
-
+ retvalue =0;
+ goto END;
case WM_SETFOCUS:
descr->caret_on = TRUE;
if (descr->focus_item != -1)
LISTBOX_RepaintItem( wnd, descr, descr->focus_item, ODA_FOCUS );
SEND_NOTIFICATION( wnd, descr, LBN_SETFOCUS );
- return 0;
-
+ retvalue =0;
+ goto END;
case WM_KILLFOCUS:
if ((descr->focus_item != -1) && descr->caret_on)
LISTBOX_RepaintItem( wnd, descr, descr->focus_item, ODA_FOCUS );
SEND_NOTIFICATION( wnd, descr, LBN_KILLFOCUS );
- return 0;
-
+ retvalue =0;
+ goto END;
case WM_HSCROLL:
- return LISTBOX_HandleHScroll( wnd, descr, wParam, lParam );
-
+ retvalue =LISTBOX_HandleHScroll( wnd, descr, wParam, lParam );
+ goto END;
case WM_VSCROLL:
- return LISTBOX_HandleVScroll( wnd, descr, wParam, lParam );
-
+ retvalue =LISTBOX_HandleVScroll( wnd, descr, wParam, lParam );
+ goto END;
case WM_LBUTTONDOWN:
- return LISTBOX_HandleLButtonDown( wnd, descr, wParam,
+ retvalue =LISTBOX_HandleLButtonDown( wnd, descr, wParam,
(INT16)LOWORD(lParam),
(INT16)HIWORD(lParam) );
-
+ goto END;
case WM_LBUTTONDBLCLK:
if (descr->style & LBS_NOTIFY)
SEND_NOTIFICATION( wnd, descr, LBN_DBLCLK );
- return 0;
-
+ retvalue =0;
+ goto END;
case WM_MOUSEMOVE:
if (GetCapture() == hwnd)
LISTBOX_HandleMouseMove( wnd, descr, (INT16)LOWORD(lParam),
(INT16)HIWORD(lParam) );
- return 0;
-
+ retvalue =0;
+ goto END;
case WM_LBUTTONUP:
- return LISTBOX_HandleLButtonUp( wnd, descr );
-
+ retvalue =LISTBOX_HandleLButtonUp( wnd, descr );
+ goto END;
case WM_KEYDOWN:
- return LISTBOX_HandleKeyDown( wnd, descr, wParam );
-
+ retvalue =LISTBOX_HandleKeyDown( wnd, descr, wParam );
+ goto END;
case WM_CHAR:
- return LISTBOX_HandleChar( wnd, descr, wParam );
-
+ retvalue =LISTBOX_HandleChar( wnd, descr, wParam );
+ goto END;
case WM_SYSTIMER:
- return LISTBOX_HandleSystemTimer( wnd, descr );
-
+ retvalue =LISTBOX_HandleSystemTimer( wnd, descr );
+ goto END;
case WM_ERASEBKGND:
if (IS_OWNERDRAW(descr))
{
@@ -2483,11 +2571,14 @@
wParam, (LPARAM)wnd->hwndSelf );
if (hbrush) FillRect( (HDC)wParam, &rect, hbrush );
}
- return 1;
-
+ retvalue =1;
+ goto END;
case WM_DROPFILES:
if( !descr->lphc )
- return SendMessageA( descr->owner, msg, wParam, lParam );
+ {
+ retvalue =SendMessageA( descr->owner, msg, wParam, lParam );
+ goto END;
+ }
break;
case WM_DROPOBJECT:
@@ -2499,22 +2590,27 @@
LPDRAGINFO dragInfo = (LPDRAGINFO)PTR_SEG_TO_LIN( (SEGPTR)lParam );
dragInfo->l = LISTBOX_GetItemFromPoint( wnd, descr, dragInfo->pt.x,
dragInfo->pt.y );
- return SendMessageA( descr->owner, msg, wParam, lParam );
+ retvalue =SendMessageA( descr->owner, msg, wParam, lParam );
+ goto END;
}
break;
case WM_NCCREATE:
if (TWEAK_WineLook > WIN31_LOOK)
wnd->dwExStyle |= WS_EX_CLIENTEDGE;
- return DefWindowProcA( hwnd, msg, wParam, lParam );
-
+ retvalue =DefWindowProcA( hwnd, msg, wParam, lParam );
+ goto END;
default:
if ((msg >= WM_USER) && (msg < 0xc000))
WARN(listbox, "[%04x]: unknown msg %04x wp %08x lp %08lx\n",
hwnd, msg, wParam, lParam );
- return DefWindowProcA( hwnd, msg, wParam, lParam );
+ retvalue =DefWindowProcA( hwnd, msg, wParam, lParam );
+ goto END;
}
- return 0;
+ retvalue =0;
+END:
+ WIN_ReleaseWndPtr(wnd);
+ return retvalue;
}
/***********************************************************************
@@ -2533,8 +2629,10 @@
RedrawWindow( lphc->self->hwndSelf, NULL, 0,
RDW_INVALIDATE | RDW_ERASE | RDW_UPDATENOW );
+ WIN_ReleaseWndPtr(wnd);
return lRet;
}
+ WIN_ReleaseWndPtr(wnd);
}
return CB_ERR;
}
@@ -2571,20 +2669,20 @@
lphc = (LPHEADCOMBO)(lpcs->lpCreateParams);
#undef lpcs
- return LISTBOX_Create( wnd, lphc );
-
+ lRet =LISTBOX_Create( wnd, lphc );
+ goto END;
case WM_LBUTTONDOWN:
- return LISTBOX_HandleLButtonDown( wnd, descr, wParam,
+ lRet =LISTBOX_HandleLButtonDown( wnd, descr, wParam,
(INT16)LOWORD(lParam), (INT16)HIWORD(lParam));
-
+ goto END;
/* avoid activation at all costs */
case WM_MOUSEACTIVATE:
- return MA_NOACTIVATE;
-
+ lRet =MA_NOACTIVATE;
+ goto END;
case WM_NCACTIVATE:
- return FALSE;
-
+ lRet =FALSE;
+ goto END;
case WM_KEYDOWN:
if( CB_GETTYPE(lphc) != CBS_SIMPLE )
{
@@ -2596,30 +2694,34 @@
&& (wParam == VK_DOWN || wParam == VK_UP)) )
{
COMBO_FlipListbox( lphc, FALSE );
- return 0;
+ lRet =0;
+ goto END;
}
}
- return LISTBOX_HandleKeyDown( wnd, descr, wParam );
+ lRet =LISTBOX_HandleKeyDown( wnd, descr, wParam );
+ goto END;
case LB_SETCURSEL16:
case LB_SETCURSEL:
lRet = ListBoxWndProc( hwnd, msg, wParam, lParam );
- return (lRet == LB_ERR) ? lRet : descr->selected_item;
-
+ lRet =(lRet == LB_ERR) ? lRet : descr->selected_item;
+ goto END;
case WM_NCDESTROY:
if( CB_GETTYPE(lphc) != CBS_SIMPLE )
lphc->hWndLBox = 0;
/* fall through */
default:
- return ListBoxWndProc( hwnd, msg, wParam, lParam );
+ lRet =ListBoxWndProc( hwnd, msg, wParam, lParam );
+ goto END;
}
}
lRet = DefWindowProcA( hwnd, msg, wParam, lParam );
TRACE(combo,"\t default on msg [%04x]\n", (UINT16)msg );
}
-
+END:
+ WIN_ReleaseWndPtr(wnd);
return lRet;
}