private static ShellAPI.MENUITEMINFO generateMenuItemInfo(CustomMenuStructure cms, uint idCmdFirst) { ShellAPI.MENUITEMINFO mii = new ShellAPI.MENUITEMINFO(); mii.cbSize = Marshal.SizeOf(mii); mii.wID = idCmdFirst + cms.ID; mii.fType = ShellAPI.MFT.MFT_STRING; mii.fMask = ShellAPI.MIIM.ID | ShellAPI.MIIM.TYPE; mii.dwTypeData = cms.Text; mii.fState = ShellAPI.MFS.ENABLED; if (cms.Checked) { mii.fState |= ShellAPI.MFS.CHECKED; } if (cms.IsFolder) { mii.fMask |= ShellAPI.MIIM.SUBMENU; } //Not working, dont know why... //if (cms.Icon != null) //{ // IntPtr ptrBitmap = cms.Icon.GetHbitmap(); // imgPtrConstructed.Add(ptrBitmap); // mii.hbmpItem = ptrBitmap; // mii.fMask |= ShellAPI.MIIM.BITMAP; // mii.fType |= ShellAPI.MFT.BITMAP; //} return(mii); }
private static void insertMenu(IntPtr menu, uint idCmdFirst, int pos, IntPtr newPopup, CustomMenuStructure item, ref List <IntPtr> imgPtrConstructed) { ShellAPI.MENUITEMINFO menuItemInfo = generateMenuItemInfo(item, idCmdFirst); if (newPopup != IntPtr.Zero) { menuItemInfo.hSubMenu = newPopup; } ShellAPI.InsertMenuItem(menu, (uint)pos, true, ref menuItemInfo); if (item.Icon != null) { IntPtr ptrBitmap = item.Icon.GetHbitmap(); imgPtrConstructed.Add(ptrBitmap); ShellAPI.SetMenuItemBitmaps(menu, (uint)pos, (uint)ShellAPI.MFT.BYPOSITION, ptrBitmap, ptrBitmap); } }