예제 #1
0
        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);
        }
예제 #2
0
 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);
     }
 }