GetMenuItemID (user32)
Last changed: gaddas-77.70.108.196

.
Summary

C# Signature:

[DllImport("user32.dll")]
static extern uint GetMenuItemID(IntPtr hMenu, int nPos);

User-Defined Types:

None.

Notes:

None.

Tips & Tricks:

Please add some!

Sample Code:

    // Unmerges two menus
    [DllImport("user32.dll")]
    static extern uint GetMenuItemID(IntPtr hMenu, int nPos);

    static MenuItem FindSubMenuID(Menu menu, uint id)
    {
        for (int i = 0; i<menu.MenuItems.Count; i++)
        {
            if (GetMenuItemID(menu.Handle, i) == id)
                return menu.MenuItems[i];
        }
        return null;
    }

    /// <summary>
    /// Unmerge menus previously merged with Menu.MergeMenu()
    /// </summary>
    /// <param name="DestMenu">Menu that contains SourceMenu</param>
    /// <param name="SourceMenu">Menu to be removed from DestMenu</param>
    public static void UnmergeMenu(Menu DestMenu, Menu SourceMenu)
    {
        int sourceItemCount = SourceMenu.MenuItems.Count;
        for(int j=0; j<sourceItemCount; j++) // iterate all sub menu items of SourceMenu
        {                
            MenuItem mis = SourceMenu.MenuItems[j];

            uint id = GetMenuItemID(SourceMenu.Handle, j);
            MenuItem mid = FindSubMenuID(DestMenu, id);

            if (mid != null)
            {
                UnmergeMenu(mid, mis);
                if (!mid.IsParent) // is empty?
                    DestMenu.MenuItems.Remove(mid);
                break;
            }
        }
    }

Alternative Managed API:

Do you know one? Please contribute it!

Documentation