Jacek Caban : user32: Reimplement GetMenuStringA on top of NtUserThunkedMenuItemInfo.
Alexandre Julliard
julliard at winehq.org
Tue Jun 21 15:45:24 CDT 2022
Module: wine
Branch: master
Commit: 992d69b9d128e9c519306e36fd103ea4bd1b76bb
URL: https://source.winehq.org/git/wine.git/?a=commit;h=992d69b9d128e9c519306e36fd103ea4bd1b76bb
Author: Jacek Caban <jacek at codeweavers.com>
Date: Tue Jun 21 13:18:52 2022 +0200
user32: Reimplement GetMenuStringA on top of NtUserThunkedMenuItemInfo.
Signed-off-by: Jacek Caban <jacek at 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;
}
More information about the wine-cvs
mailing list