return FALSE;
}
+UINT FASTCALL IntGetMenuState( HMENU hMenu, UINT uId, UINT uFlags)
+{
+ PMENU_OBJECT MenuObject, SubMenu;
+ PMENU_ITEM mi;
+
+ if (!(MenuObject = UserGetMenuObject(hMenu)))
+ {
+ return (UINT)-1;
+ }
+
+ if (IntGetMenuItemByFlag(MenuObject, uId, uFlags, &SubMenu, &mi, NULL))
+ {
+ if (mi->hSubMenu)
+ {
+ if (SubMenu)
+ {
+ UINT nSubItems = SubMenu->MenuInfo.MenuItemCount;
+ return (nSubItems << 8) | ((mi->fState | mi->fType) & 0xff);
+ }
+ else
+ return (UINT)-1;
+ }
+ return (mi->fType | mi->fState);
+ }
+ return (UINT)-1;
+}
+
+HMENU FASTCALL IntGetSubMenu( HMENU hMenu, int nPos)
+{
+ PMENU_OBJECT MenuObject, SubMenu;
+
+ if (!(MenuObject = UserGetMenuObject(hMenu)))
+ {
+ return NULL;
+ }
+ if (IntGetMenuItemByFlag(MenuObject, nPos, MF_BYPOSITION, &SubMenu, NULL, NULL))
+ {
+ return SubMenu ? UserHMGetHandle(SubMenu) : NULL;
+ }
+ return NULL;
+}
+
+UINT FASTCALL IntFindSubMenu(HMENU *hMenu, HMENU hSubTarget )
+{
+ PMENU_OBJECT MenuObject;
+ PMENU_ITEM mi;
+ UINT i;
+
+ if ( (*hMenu) == (HMENU)0xffff || !(MenuObject = UserGetMenuObject(*hMenu)) )
+ return NO_SELECTED_ITEM;
+
+ for (i = 0; i < MenuObject->MenuInfo.MenuItemCount; i++)
+ {
+ if (!IntGetMenuItemByFlag(MenuObject, i, MF_BYPOSITION, NULL, &mi, NULL))
+ {
+ return NO_SELECTED_ITEM;
+ }
+
+ if (!(mi->fType & MF_POPUP)) continue;
+
+ if (mi->hSubMenu == hSubTarget)
+ {
+ return i;
+ }
+ else
+ {
+ HMENU hsubmenu = mi->hSubMenu;
+ UINT pos = IntFindSubMenu(&hsubmenu, hSubTarget );
+ if (pos != NO_SELECTED_ITEM)
+ {
+ *hMenu = hsubmenu;
+ return pos;
+ }
+ }
+ }
+ return NO_SELECTED_ITEM;
+}
/* FUNCTIONS *****************************************************************/