Windows 11上下文菜单样式

li9yvcax  于 2022-11-26  发布在  Windows
关注(0)|答案(1)|浏览(204)

为Windows窗体上下文菜单控件(使用ContextMenuStrip)提供的默认样式看起来像是为Office XP创建的样式-它的样式与Windows 11的样式不太匹配。

相比之下,现代的Windows 11上下文菜单有圆角,并且是主题感知的:

即使对于一些遗留应用程序来说,它不是主题感知的,它仍然使用圆角。

如何从Windows窗体(或控制台)应用程序复制Windows 11任务栏图标的主题感知样式和现代(圆角)上下文菜单?
理想情况下,我不想从头开始编写一个完整的托盘菜单渲染器,而只是重用内置的操作系统组件,但到目前为止,我遇到了一堵墙,当谈到找出 * 什么 * 工具,我需要使用,甚至得到菜单。

qyswt5oh

qyswt5oh1#

使用此类

class CustomContextMenu : ContextMenuStrip
{
    [DllImport("dwmapi.dll", CharSet = CharSet.Unicode, SetLastError = true)]
    private static extern long DwmSetWindowAttribute(IntPtr hwnd,
                                                        DWMWINDOWATTRIBUTE attribute,
                                                        ref DWM_WINDOW_CORNER_PREFERENCE pvAttribute,
                                                        uint cbAttribute);
    
    public CustomContextMenu()
    {
        var preference = DWM_WINDOW_CORNER_PREFERENCE.DWMWCP_ROUND;     //change as you want
        DwmSetWindowAttribute(Handle,
                              DWMWINDOWATTRIBUTE.DWMWA_WINDOW_CORNER_PREFERENCE,
                              ref preference,
                              sizeof(uint));
    }

    public enum DWMWINDOWATTRIBUTE
    {
        DWMWA_WINDOW_CORNER_PREFERENCE = 33
    }
    public enum DWM_WINDOW_CORNER_PREFERENCE
    {
        DWMWA_DEFAULT = 0,
        DWMWCP_DONOTROUND = 1,
        DWMWCP_ROUND = 2,
        DWMWCP_ROUNDSMALL = 3,
    }
}

相关问题