mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-06 20:30:42 +00:00
user32: Reimplement GetMenuStringA on top of NtUserThunkedMenuItemInfo.
Signed-off-by: Jacek Caban <jacek@codeweavers.com>
This commit is contained in:
parent
7099c8d7e8
commit
992d69b9d1
|
@ -476,42 +476,21 @@ BOOL WINAPI ChangeMenuW( HMENU hMenu, UINT pos, LPCWSTR data,
|
|||
/*******************************************************************
|
||||
* GetMenuStringA (USER32.@)
|
||||
*/
|
||||
INT WINAPI GetMenuStringA(
|
||||
HMENU hMenu, /* [in] menuhandle */
|
||||
UINT wItemID, /* [in] menu item (dep. on wFlags) */
|
||||
LPSTR str, /* [out] outbuffer. If NULL, func returns entry length*/
|
||||
INT nMaxSiz, /* [in] length of buffer. if 0, func returns entry len*/
|
||||
UINT wFlags /* [in] MF_ flags */
|
||||
)
|
||||
INT WINAPI GetMenuStringA( HMENU menu, UINT item, char *str, INT count, UINT flags )
|
||||
{
|
||||
POPUPMENU *menu;
|
||||
MENUITEM *item;
|
||||
UINT pos;
|
||||
INT ret;
|
||||
MENUITEMINFOA info;
|
||||
int ret;
|
||||
|
||||
TRACE("menu=%p item=%04x ptr=%p len=%d flags=%04x\n", hMenu, wItemID, str, nMaxSiz, wFlags );
|
||||
if (str && nMaxSiz) str[0] = '\0';
|
||||
TRACE( "menu=%p item=%04x ptr=%p len=%d flags=%04x\n", menu, item, str, count, flags );
|
||||
|
||||
if (!(menu = find_menu_item(hMenu, wItemID, wFlags, &pos)))
|
||||
{
|
||||
SetLastError( ERROR_MENU_ITEM_NOT_FOUND);
|
||||
return 0;
|
||||
}
|
||||
item = &menu->items[pos];
|
||||
|
||||
if (!item->text)
|
||||
ret = 0;
|
||||
else if (!str || !nMaxSiz)
|
||||
ret = WideCharToMultiByte( CP_ACP, 0, item->text, -1, NULL, 0, NULL, NULL );
|
||||
else
|
||||
{
|
||||
if (!WideCharToMultiByte( CP_ACP, 0, item->text, -1, str, nMaxSiz, NULL, NULL ))
|
||||
str[nMaxSiz-1] = 0;
|
||||
ret = strlen(str);
|
||||
}
|
||||
release_menu_ptr(menu);
|
||||
|
||||
TRACE("returning %s\n", debugstr_a(str));
|
||||
info.cbSize = sizeof(info);
|
||||
info.fMask = MIIM_STRING;
|
||||
info.dwTypeData = str;
|
||||
info.cch = count;
|
||||
ret = NtUserThunkedMenuItemInfo( menu, item, flags, NtUserGetMenuItemInfoA,
|
||||
(MENUITEMINFOW *)&info, NULL );
|
||||
if (ret) ret = info.cch;
|
||||
TRACE( "returning %s %d\n", debugstr_a( str ), ret );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue