Beispiel #1
0
        public void UpdateMenu(IWindowMenuItem menuItem)
        {
            var mii = new MENUITEMINFO(null)
            {
                fMask = MenuItemInfoMember.MIIM_CHECKMARKS |
                        MenuItemInfoMember.MIIM_DATA |
                        MenuItemInfoMember.MIIM_FTYPE |
                        MenuItemInfoMember.MIIM_ID |
                        MenuItemInfoMember.MIIM_STATE |
                        MenuItemInfoMember.MIIM_STRING
            };

            PInvokeUtils.Try(() => SystemMenuAPI.GetMenuItemInfo(_hSysMenu, menuItem.Id, false, ref mii));

            if (menuItem.Enabled)
            {
                mii.fState &= (~MenuItemState.MFS_DISABLED); // clear "disabled" flag
            }
            else
            {
                mii.fState |= MenuItemState.MFS_DISABLED;    // set "disabled" flag
            }
            if (menuItem.Checked)
            {
                mii.fState |= MenuItemState.MFS_CHECKED;     // set "checked" flag
            }
            else
            {
                mii.fState &= (~MenuItemState.MFS_CHECKED);  // clear "checked" flag
            }
            mii.fMask = MenuItemInfoMember.MIIM_STATE;

            PInvokeUtils.Try(() => SystemMenuAPI.SetMenuItemInfo(_hSysMenu, menuItem.Id, false, ref mii));

            // TODO: From my observations, this function always returns false, even though it appears to succeed.
            //       Am I using it incorrectly?
            SystemMenuAPI.DrawMenuBar(_hSysMenu);
        }
Beispiel #2
0
 public void InsertSeparator(uint position)
 {
     PInvokeUtils.Try(() => SystemMenuAPI.InsertMenu(_hSysMenu, position, MenuFlags.MF_BYPOSITION | MenuFlags.MF_SEPARATOR, 0, string.Empty));
 }
Beispiel #3
0
 public void InsertMenu(uint position, IWindowMenuItem menuItem)
 {
     PInvokeUtils.Try(() => SystemMenuAPI.InsertMenu(_hSysMenu, position, MenuFlags.MF_BYPOSITION | MenuFlags.MF_STRING, menuItem.Id, menuItem.Text));
     _items.Add(menuItem);
 }
Beispiel #4
0
 public void AppendSeparator()
 {
     PInvokeUtils.Try(() => SystemMenuAPI.AppendMenu(_hSysMenu, MenuFlags.MF_SEPARATOR, 0, string.Empty));
 }
Beispiel #5
0
 public void AppendMenu(IWindowMenuItem menuItem)
 {
     PInvokeUtils.Try(() => SystemMenuAPI.AppendMenu(_hSysMenu, MenuFlags.MF_STRING, menuItem.Id, menuItem.Text));
     _items.Add(menuItem);
 }
Beispiel #6
0
 internal WindowMenu(Form form)
 {
     _hSysMenu = SystemMenuAPI.GetSystemMenu(form.Handle, false);
     new WndProcHook(form).WndProcMessage += OnWndProcMessage;
 }