public int QueryContextMenu(
            IntPtr hMenu,
            uint iMenu,
            uint idCmdFirst,
            uint idCmdLast,
            uint uFlags)
        {
            // If uFlags include CMF_DEFAULTONLY then we should not do anything.
            if (((uint)CMF.CMF_DEFAULTONLY & uFlags) != 0)
            {
                return(WinError.MAKE_HRESULT(WinError.SEVERITY_SUCCESS, 0, 0));
            }

            // Use either InsertMenu or InsertMenuItem to add menu items.

            MENUITEMINFO mii = new MENUITEMINFO();

            mii.cbSize = (uint)Marshal.SizeOf(mii);
            //mii.fMask = MIIM.MIIM_ID | MIIM.MIIM_TYPE | MIIM.MIIM_STATE;
            mii.fMask = MIIM.MIIM_BITMAP | MIIM.MIIM_STRING | MIIM.MIIM_FTYPE |
                        MIIM.MIIM_ID | MIIM.MIIM_STATE;
            mii.wID        = idCmdFirst + _idmDisplay;
            mii.fType      = MFT.MFT_STRING;
            mii.dwTypeData = _menuText;
            mii.fState     = MFS.MFS_ENABLED;
            mii.hbmpItem   = this.menuBmp;
            if (!NativeMethods.InsertMenuItem(hMenu, iMenu, true, ref mii))
            {
                return(Marshal.GetHRForLastWin32Error());
            }

            // Add a separator.
            MENUITEMINFO sep = new MENUITEMINFO();

            sep.cbSize = (uint)Marshal.SizeOf(sep);
            sep.fMask  = MIIM.MIIM_TYPE;
            sep.fType  = MFT.MFT_SEPARATOR;
            if (!NativeMethods.InsertMenuItem(hMenu, iMenu + 1, true, ref sep))
            {
                return(Marshal.GetHRForLastWin32Error());
            }

            // Return an HRESULT value with the severity set to SEVERITY_SUCCESS.
            // Set the code value to the offset of the largest command identifier
            // that was assigned, plus one (1).
            return(WinError.MAKE_HRESULT(WinError.SEVERITY_SUCCESS, 0, _idmDisplay + 1));
        }
Beispiel #2
0
 public static extern bool InsertMenuItem(
     IntPtr hMenu,
     uint uItem,
     [MarshalAs(UnmanagedType.Bool)] bool fByPosition,
     ref MENUITEMINFO mii);
        public int QueryContextMenu(
         IntPtr hMenu,
         uint iMenu,
         uint idCmdFirst,
         uint idCmdLast,
         uint uFlags)
        {
            // If uFlags include CMF_DEFAULTONLY then we should not do anything.
             if (((uint)CMF.CMF_DEFAULTONLY & uFlags) != 0)
             {
            return WinError.MAKE_HRESULT(WinError.SEVERITY_SUCCESS, 0, 0);
             }

             // Use either InsertMenu or InsertMenuItem to add menu items.

             MENUITEMINFO mii = new MENUITEMINFO();
             mii.cbSize = (uint)Marshal.SizeOf(mii);
             //mii.fMask = MIIM.MIIM_ID | MIIM.MIIM_TYPE | MIIM.MIIM_STATE;
             mii.fMask = MIIM.MIIM_BITMAP | MIIM.MIIM_STRING | MIIM.MIIM_FTYPE |
                MIIM.MIIM_ID | MIIM.MIIM_STATE;
             mii.wID = idCmdFirst + _idmDisplay;
             mii.fType = MFT.MFT_STRING;
             mii.dwTypeData = _menuText;
             mii.fState = MFS.MFS_ENABLED;
             mii.hbmpItem = this.menuBmp;
             if (!NativeMethods.InsertMenuItem(hMenu, iMenu, true, ref mii))
             {
            return Marshal.GetHRForLastWin32Error();
             }

             // Add a separator.
             MENUITEMINFO sep = new MENUITEMINFO();
             sep.cbSize = (uint)Marshal.SizeOf(sep);
             sep.fMask = MIIM.MIIM_TYPE;
             sep.fType = MFT.MFT_SEPARATOR;
             if (!NativeMethods.InsertMenuItem(hMenu, iMenu + 1, true, ref sep))
             {
            return Marshal.GetHRForLastWin32Error();
             }

             // Return an HRESULT value with the severity set to SEVERITY_SUCCESS.
             // Set the code value to the offset of the largest command identifier
             // that was assigned, plus one (1).
             return WinError.MAKE_HRESULT(WinError.SEVERITY_SUCCESS, 0, _idmDisplay + 1);
        }