Implement undocumented listbox messages LB_INSERTSTRING_UPPER, LB_INSERTSTRING_LOWER, LB_ADDSTRING_UPPER, LB_ADDSTRING_LOWER and use them in combobox CB_ADDSTRING and CB_INSERTSTRING implementation.

svn path=/trunk/; revision=20107
This commit is contained in:
Filip Navara 2005-12-12 19:49:08 +00:00
parent 8464f35250
commit 8f10c7915c
3 changed files with 37 additions and 56 deletions

View file

@ -1842,19 +1842,6 @@ static LRESULT COMBO_GetComboBoxInfo(LPHEADCOMBO lphc, COMBOBOXINFO *pcbi)
return TRUE;
}
static char *strdupA(LPCSTR str)
{
char *ret;
DWORD len;
if(!str) return NULL;
len = strlen(str);
ret = HeapAlloc(GetProcessHeap(), 0, len + 1);
memcpy(ret, str, len + 1);
return ret;
}
/***********************************************************************
* ComboWndProc_common
*
@ -2082,33 +2069,14 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
/* fall through */
#endif
case CB_ADDSTRING:
if( unicode )
{
if( lphc->dwStyle & CBS_LOWERCASE )
strlwrW((LPWSTR)lParam);
else if( lphc->dwStyle & CBS_UPPERCASE )
struprW((LPWSTR)lParam);
return SendMessageW(lphc->hWndLBox, LB_ADDSTRING, 0, lParam);
}
else /* unlike the unicode version, the ansi version does not overwrite
the string if converting case */
{
char *string = NULL;
LRESULT ret;
if( lphc->dwStyle & CBS_LOWERCASE )
{
string = strdupA((LPSTR)lParam);
_strlwr(string);
}
else if( lphc->dwStyle & CBS_UPPERCASE )
{
string = strdupA((LPSTR)lParam);
_strupr(string);
}
ret = SendMessageA(lphc->hWndLBox, LB_ADDSTRING, 0, string ? (LPARAM)string : lParam);
HeapFree(GetProcessHeap(), 0, string);
return ret;
}
{
UINT msg = LB_ADDSTRING;
if( lphc->dwStyle & CBS_LOWERCASE )
msg = LB_ADDSTRING_LOWER;
else if( lphc->dwStyle & CBS_UPPERCASE )
msg = LB_ADDSTRING_UPPER;
return SendMessageW(lphc->hWndLBox, msg, 0, lParam);
}
#ifndef __REACTOS__
case CB_INSERTSTRING16:
wParam = (INT)(INT16)wParam;
@ -2116,22 +2084,14 @@ static LRESULT ComboWndProc_common( HWND hwnd, UINT message,
/* fall through */
#endif
case CB_INSERTSTRING:
if( unicode )
{
if( lphc->dwStyle & CBS_LOWERCASE )
strlwrW((LPWSTR)lParam);
else if( lphc->dwStyle & CBS_UPPERCASE )
struprW((LPWSTR)lParam);
return SendMessageW(lphc->hWndLBox, LB_INSERTSTRING, wParam, lParam);
}
else
{
if( lphc->dwStyle & CBS_LOWERCASE )
_strlwr((LPSTR)lParam);
else if( lphc->dwStyle & CBS_UPPERCASE )
_strupr((LPSTR)lParam);
return SendMessageA(lphc->hWndLBox, LB_INSERTSTRING, wParam, lParam);
}
{
UINT msg = LB_INSERTSTRING;
if( lphc->dwStyle & CBS_LOWERCASE )
msg = LB_INSERTSTRING_LOWER;
else if( lphc->dwStyle & CBS_UPPERCASE )
msg = LB_INSERTSTRING_UPPER;
return SendMessageW(lphc->hWndLBox, msg, 0, lParam);
}
#ifndef __REACTOS__
case CB_DELETESTRING16:
#endif

View file

@ -2650,6 +2650,8 @@ static LRESULT WINAPI ListBoxWndProc_common( HWND hwnd, UINT msg,
/* fall through */
#endif
case LB_ADDSTRING:
case LB_ADDSTRING_LOWER:
case LB_ADDSTRING_UPPER:
{
INT ret;
LPWSTR textW;
@ -2662,6 +2664,12 @@ static LRESULT WINAPI ListBoxWndProc_common( HWND hwnd, UINT msg,
if((textW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR))))
MultiByteToWideChar(CP_ACP, 0, textA, -1, textW, countW);
}
/* in the unicode the version, the string is really overwritten
during the converting case */
if (msg == LB_ADDSTRING_LOWER)
strlwrW(textW);
else if (msg == LB_ADDSTRING_UPPER)
struprW(textW);
wParam = LISTBOX_FindStringPos( descr, textW, FALSE );
ret = LISTBOX_InsertString( descr, wParam, textW );
if (!unicode && HAS_STRINGS(descr))
@ -2676,6 +2684,8 @@ static LRESULT WINAPI ListBoxWndProc_common( HWND hwnd, UINT msg,
/* fall through */
#endif
case LB_INSERTSTRING:
case LB_INSERTSTRING_UPPER:
case LB_INSERTSTRING_LOWER:
{
INT ret;
LPWSTR textW;
@ -2688,6 +2698,12 @@ static LRESULT WINAPI ListBoxWndProc_common( HWND hwnd, UINT msg,
if((textW = HeapAlloc(GetProcessHeap(), 0, countW * sizeof(WCHAR))))
MultiByteToWideChar(CP_ACP, 0, textA, -1, textW, countW);
}
/* in the unicode the version, the string is really overwritten
during the converting case */
if (msg == LB_INSERTSTRING_LOWER)
strlwrW(textW);
else if (msg == LB_INSERTSTRING_UPPER)
struprW(textW);
ret = LISTBOX_InsertString( descr, wParam, textW );
if(!unicode && HAS_STRINGS(descr))
HeapFree(GetProcessHeap(), 0, textW);

View file

@ -110,4 +110,9 @@ typedef struct
extern BOOL COMBO_FlipListbox( LPHEADCOMBO, BOOL, BOOL );
#define LB_INSERTSTRING_UPPER 0x1AA
#define LB_INSERTSTRING_LOWER 0x1AB
#define LB_ADDSTRING_UPPER 0x1AC
#define LB_ADDSTRING_LOWER 0x1AD
#endif /* _ROS_CONTROLS_H */