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

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

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

如何复制Windows窗体(或控制台)应用程序中Windows 11托盘图标的主题感知样式和现代(圆角)上下文菜单?
理想情况下,我不想从头开始写一个完整的托盘菜单呈现器,而只是重复使用内置的OS组件,但到目前为止,我遇到了一个难题,我需要使用什么工具来获得菜单。
发布于 2022-11-25 16:27:01
使用这个类
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,
}
}https://stackoverflow.com/questions/71403685
复制相似问题