Ejemplo n.º 1
0
    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);
    }
Ejemplo n.º 2
0
 internal static extern IntPtr GetMenuBarInfo(IntPtr hWnd, MenuObjectId idObject, long idItem, MENUBARINFO pmbi);
Ejemplo n.º 3
0
 static public extern bool GetMenuBarInfo(IntPtr hWnd, long idObject, long idItem, ref MENUBARINFO pmbi);
Ejemplo n.º 4
0
 static extern bool GetMenuBarInfo(IntPtr hwnd, uint idObject, uint idItem, ref MENUBARINFO pmbi);
Ejemplo n.º 5
0
        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;
            }
        }
Ejemplo n.º 6
0
        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;
            }
        }
Ejemplo n.º 7
0
 static extern bool GetMenuBarInfo(IntPtr hwnd, uint idObject, uint idItem, ref MENUBARINFO pmbi);
Ejemplo n.º 8
0
 public static extern bool GetMenuBarInfo(
     WindowHandle hwnd,
     MenuObject idObject,
     int idItem,
     ref MENUBARINFO pmbi);