簡體   English   中英

Windows 11 上下文菜單樣式

[英]Windows 11 Context Menu Style

為 Windows 提供的默認 styles Forms 上下文菜單控件(使用ContextMenuStrip )看起來像是為 Office XP 創建的東西 - 它的樣式與 Windows 11 的樣式不太匹配。

Windows 11 中舊上下文菜單的示例

相比之下,現代 Windows 11 上下文菜單具有圓角並且是主題感知的:

主題感知 Windows 11 上下文菜單

即使對於某些遺留應用程序不支持主題的情況,它仍然使用圓角。

現代 Windows 11 上下文菜單示例

如何從 Windows Forms(或控制台)應用程序復制 Windows 11 托盤圖標的主題感知樣式和現代(圓角)上下文菜單?

理想情況下,我盡量不要從頭開始編寫整個托盤菜單渲染器,而只是重新使用內置的操作系統組件,但到目前為止,在弄清楚我需要使用什么工具來實現甚至得到菜單。

使用這個 class

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,
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM