diff --git a/reactos/dll/win32/user32/misc/stubs.c b/reactos/dll/win32/user32/misc/stubs.c index 13697c526d7..354b5d3f31c 100644 --- a/reactos/dll/win32/user32/misc/stubs.c +++ b/reactos/dll/win32/user32/misc/stubs.c @@ -538,12 +538,11 @@ BOOL WINAPI CliImmSetHotKey(DWORD dwID, UINT uModifiers, UINT uVirtualKey, HKL h } /* - * @unimplemented + * @implemented */ DWORD WINAPI GetMenuIndex(HMENU hMenu, HMENU hSubMenu) { - UNIMPLEMENTED; - return 0; + return NtUserGetMenuIndex(hMenu, hSubMenu); } /* diff --git a/reactos/subsystems/win32/win32k/ntuser/menu.c b/reactos/subsystems/win32/win32k/ntuser/menu.c index 0e32359ad2f..65475c48620 100644 --- a/reactos/subsystems/win32/win32k/ntuser/menu.c +++ b/reactos/subsystems/win32/win32k/ntuser/menu.c @@ -2034,21 +2034,41 @@ CLEANUP: END_CLEANUP; } - /* - * @unimplemented + * @implemented */ UINT APIENTRY NtUserGetMenuIndex( HMENU hMenu, - UINT wID) + HMENU hSubMenu) { - UNIMPLEMENTED + PMENU_OBJECT Menu, SubMenu; + PMENU_ITEM MenuItem; + DECLARE_RETURN(UINT); - return 0; + DPRINT("Enter NtUserGetMenuIndex\n"); + UserEnterShared(); + + if ( !(Menu = UserGetMenuObject(hMenu)) || + !(SubMenu = UserGetMenuObject(hSubMenu)) ) + RETURN(0xFFFFFFFF); + + MenuItem = Menu->MenuItemList; + while(MenuItem) + { + if (MenuItem->hSubMenu == hSubMenu) + RETURN(MenuItem->wID); + MenuItem = MenuItem->Next; + } + + RETURN(0xFFFFFFFF); + +CLEANUP: + DPRINT("Leave NtUserGetMenuIndex, ret=%i\n",_ret_); + UserLeave(); + END_CLEANUP; } - /* * @implemented */ @@ -2218,10 +2238,6 @@ UserMenuInfo( return( Res); } - - - - /* * @implemented */