- Return value of WM_GETTEXTLENGTH is in TCHARs, not in bytes, so there is

no need to convert between Ansi and Unicode (number of characters remains
  the same)
- Allocate Ansi buffer for WM_GETTEXT since MultiByteToWideChar can't handle
  overlapping buffers

svn path=/trunk/; revision=10760
This commit is contained in:
Gé van Geldorp 2004-08-31 23:32:01 +00:00
parent a9bae8fa65
commit 1d76d6dd93

View file

@ -1,4 +1,4 @@
/* $Id: message.c,v 1.42 2004/08/15 21:36:30 chorns Exp $ /* $Id: message.c,v 1.43 2004/08/31 23:32:01 gvg Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS user32.dll * PROJECT: ReactOS user32.dll
@ -541,15 +541,6 @@ MsgiAnsiToUnicodeReply(LPMSG UnicodeMsg, LPMSG AnsiMsg, LRESULT *Result)
} }
break; break;
} }
case WM_GETTEXTLENGTH:
case CB_GETLBTEXTLEN:
case LB_GETTEXTLEN:
{
/* FIXME: There may be one DBCS char for each Unicode char */
*Result *= 2;
break;
}
} }
MsgiAnsiToUnicodeCleanup(UnicodeMsg, AnsiMsg); MsgiAnsiToUnicodeCleanup(UnicodeMsg, AnsiMsg);
@ -606,6 +597,17 @@ MsgiUnicodeToAnsiMessage(LPMSG AnsiMsg, LPMSG UnicodeMsg)
UnicodeMsg->lParam = (LPARAM)CsA; UnicodeMsg->lParam = (LPARAM)CsA;
break; break;
} }
case WM_GETTEXT:
{
/* Ansi string might contain MBCS chars so we need 2 * the number of chars */
AnsiMsg->wParam = UnicodeMsg->wParam * 2;
AnsiMsg->lParam = (LPARAM) RtlAllocateHeap(GetProcessHeap(), 0, AnsiMsg->wParam);
if (NULL == (PVOID) AnsiMsg->lParam)
{
return FALSE;
}
break;
}
case WM_SETTEXT: case WM_SETTEXT:
{ {
ANSI_STRING AnsiString; ANSI_STRING AnsiString;
@ -632,6 +634,10 @@ MsgiUnicodeToAnsiCleanup(LPMSG AnsiMsg, LPMSG UnicodeMsg)
switch(UnicodeMsg->message) switch(UnicodeMsg->message)
{ {
case WM_GETTEXT: case WM_GETTEXT:
{
RtlFreeHeap(GetProcessHeap(), 0, (PVOID) AnsiMsg->lParam);
break;
}
case WM_SETTEXT: case WM_SETTEXT:
{ {
ANSI_STRING AString; ANSI_STRING AString;
@ -679,15 +685,6 @@ MsgiUnicodeToAnsiReply(LPMSG AnsiMsg, LPMSG UnicodeMsg, LRESULT *Result)
} }
break; break;
} }
case WM_GETTEXTLENGTH:
case CB_GETLBTEXTLEN:
case LB_GETTEXTLEN:
{
/* FIXME: There may be one DBCS char for each Unicode char */
*Result /= sizeof(WCHAR);
break;
}
} }
MsgiUnicodeToAnsiCleanup(UnicodeMsg, AnsiMsg); MsgiUnicodeToAnsiCleanup(UnicodeMsg, AnsiMsg);