From: Jacek Caban jacek@codeweavers.com
Signed-off-by: Jacek Caban jacek@codeweavers.com --- dlls/user32/menu.c | 45 ++++++++++++--------------------------------- 1 file changed, 12 insertions(+), 33 deletions(-)
diff --git a/dlls/user32/menu.c b/dlls/user32/menu.c index df260b063d9..29a266d2312 100644 --- a/dlls/user32/menu.c +++ b/dlls/user32/menu.c @@ -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; - - TRACE("menu=%p item=%04x ptr=%p len=%d flags=%04x\n", hMenu, wItemID, str, nMaxSiz, wFlags ); - if (str && nMaxSiz) str[0] = '\0'; - - if (!(menu = find_menu_item(hMenu, wItemID, wFlags, &pos))) - { - SetLastError( ERROR_MENU_ITEM_NOT_FOUND); - return 0; - } - item = &menu->items[pos]; + MENUITEMINFOA info; + int ret;
- 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( "menu=%p item=%04x ptr=%p len=%d flags=%04x\n", menu, item, str, count, flags );
- 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; }