[DllImport("user32.dll")]
static extern uint GetMenuItemID(IntPtr hMenu, int nPos);
None.
None.
Please add some!
// 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;
}
}
}
Do you know one? Please contribute it!