public void MENUBARINFO_MarshalSizeAsExpected() { MENUBARINFO info = default; int expectedSize = IntPtr.Size == 4 ? 0x20 : 0x30; Assert.Equal(expectedSize, Marshal.SizeOf(info)); Assert.Equal(expectedSize, MENUBARINFO.Create().cbSize); }
internal static extern IntPtr GetMenuBarInfo(IntPtr hWnd, MenuObjectId idObject, long idItem, MENUBARINFO pmbi);
static public extern bool GetMenuBarInfo(IntPtr hWnd, long idObject, long idItem, ref MENUBARINFO pmbi);
static extern bool GetMenuBarInfo(IntPtr hwnd, uint idObject, uint idItem, ref MENUBARINFO pmbi);
protected override void WndProc(ref Message m) { switch (m.Msg) { case WM_ENTERIDLE: base.WndProc(ref m); if (MSGF_MENU == (int)m.WParam) { MENUBARINFO mbi = new MENUBARINFO(); mbi.cbSize = Marshal.SizeOf(mbi); GetMenuBarInfo(m.LParam, OBJID_CLIENT, 0, ref mbi); if (GetMenuState(mbi.hMenu, WM_APP + 1, MF_BYCOMMAND) == -1) { IntPtr hSubMenu = CreatePopupMenu(); if (hSubMenu != IntPtr.Zero) { AppendMenu(hSubMenu, isChecked(EllipsisFormat.None), WM_NONE, "None"); AppendMenu(hSubMenu, isChecked(EllipsisFormat.Start), WM_LEFT, "Left"); AppendMenu(hSubMenu, isChecked(EllipsisFormat.End), WM_RIGHT, "Right"); AppendMenu(hSubMenu, isChecked(EllipsisFormat.Middle), WM_CENTER, "Center"); AppendMenu(hSubMenu, MF_SEPARATOR, 0, null); AppendMenu(hSubMenu, isChecked(EllipsisFormat.Path), WM_PATH, "Path Ellipsis"); AppendMenu(hSubMenu, isChecked(EllipsisFormat.Word), WM_WORD, "Word Ellipsis"); AppendMenu(mbi.hMenu, MF_SEPARATOR, 0, null); AppendMenu(mbi.hMenu, MF_POPUP, (uint)hSubMenu, "Auto Ellipsis"); } } } break; case WM_NONE: AutoEllipsis = EllipsisFormat.None; break; case WM_LEFT: AutoEllipsis = AutoEllipsis & ~EllipsisFormat.Middle | EllipsisFormat.Start; break; case WM_RIGHT: AutoEllipsis = AutoEllipsis & ~EllipsisFormat.Middle | EllipsisFormat.End; break; case WM_CENTER: AutoEllipsis |= EllipsisFormat.Middle; break; case WM_PATH: if ((AutoEllipsis & EllipsisFormat.Path) == 0) { AutoEllipsis |= EllipsisFormat.Path; } else { AutoEllipsis &= ~EllipsisFormat.Path; } break; case WM_WORD: if ((AutoEllipsis & EllipsisFormat.Word) == 0) { AutoEllipsis |= EllipsisFormat.Word; } else { AutoEllipsis &= ~EllipsisFormat.Word; } break; default: base.WndProc(ref m); break; } }
protected override void WndProc(ref Message m) { switch (m.Msg) { case WM_ENTERIDLE: base.WndProc(ref m); if (MSGF_MENU == (int)m.WParam) { MENUBARINFO mbi = new MENUBARINFO(); mbi.cbSize = Marshal.SizeOf(mbi); GetMenuBarInfo(m.LParam, OBJID_CLIENT, 0, ref mbi); if (GetMenuState(mbi.hMenu, WM_APP + 1, MF_BYCOMMAND) == -1) { IntPtr hSubMenu = CreatePopupMenu(); if (hSubMenu != IntPtr.Zero) { AppendMenu(hSubMenu, isChecked(EllipsisFormat.None), WM_NONE, "None"); AppendMenu(hSubMenu, isChecked(EllipsisFormat.Start), WM_LEFT, "Left"); AppendMenu(hSubMenu, isChecked(EllipsisFormat.End), WM_RIGHT, "Right"); AppendMenu(hSubMenu, isChecked(EllipsisFormat.Middle), WM_CENTER, "Center"); AppendMenu(hSubMenu, MF_SEPARATOR, 0, null); AppendMenu(hSubMenu, isChecked(EllipsisFormat.Path), WM_PATH, "Path Ellipsis"); AppendMenu(hSubMenu, isChecked(EllipsisFormat.Word), WM_WORD, "Word Ellipsis"); AppendMenu(mbi.hMenu, MF_SEPARATOR, 0, null); AppendMenu(mbi.hMenu, MF_POPUP, (uint)hSubMenu, "Auto Ellipsis"); } } } break; case WM_NONE: AutoEllipsis = EllipsisFormat.None; break; case WM_LEFT: AutoEllipsis = AutoEllipsis & ~EllipsisFormat.Middle | EllipsisFormat.Start; break; case WM_RIGHT: AutoEllipsis = AutoEllipsis & ~EllipsisFormat.Middle | EllipsisFormat.End; break; case WM_CENTER: AutoEllipsis |= EllipsisFormat.Middle; break; case WM_PATH: if ((AutoEllipsis & EllipsisFormat.Path) == 0) { AutoEllipsis |= EllipsisFormat.Path; } else { AutoEllipsis &= ~EllipsisFormat.Path; } break; case WM_WORD: if ((AutoEllipsis & EllipsisFormat.Word) == 0) { AutoEllipsis |= EllipsisFormat.Word; } else { AutoEllipsis &= ~EllipsisFormat.Word; } break; default: base.WndProc(ref m); break; } }
static extern bool GetMenuBarInfo(IntPtr hwnd, uint idObject, uint idItem, ref MENUBARINFO pmbi);
public static extern bool GetMenuBarInfo( WindowHandle hwnd, MenuObject idObject, int idItem, ref MENUBARINFO pmbi);