VisualStyleRenderer返回菜单项错误

本文关键字:错误 菜单项 返回 VisualStyleRenderer | 更新日期: 2023-09-27 18:13:08

代码

var renderer = new VisualStyleRenderer(VisualStyleElement.Menu.Item.Normal);

返回以下消息

类、部件和状态的给定组合不是由当前的视觉样式。

在Windows 8.1的机器上。

有谁知道为什么以及如何解决这个问题吗?

VisualStyleRenderer返回菜单项错误

在Hans Passant的帮助下,我看了一下vsstyle.h文件(在这里找到了一个副本),并一直在使用这些常量。

如果您查看enum MENUPARTS,我发现"MENU"类路径与所有部件一起工作,除了名称中带有*_TMSCHEMA的部件(这就是VisualStyleElement中的结构)。菜单列表映射到)

所以,我最终使用MENU_POPUPITEM和兄弟姐妹部分,他们似乎工作得很好。

,

var renderer = new VisualStyleRenderer("MENU", (int)MENUPARTS.MENU_POPUPBACKGROUND, (int)POPUPCHECKBACKGROUNDSTATES.MCB_NORMAL);
renderer.DrawBackground(e.Graphics, r);
renderer = new VisualStyleRenderer("MENU", (int)MENUPARTS.MENU_POPUPGUTTER, 0);
renderer.DrawBackground(e.Graphics, new Rectangle(e.Bounds.X, e.Bounds.Y, 24, e.Bounds.Height));

我希望这能帮助到别人。


IE:看起来好像VisualStyleRenderer。getmargin方法失效了因为如果我这样做

protected override void OnMeasureItem(MeasureItemEventArgs e)
{
   var renderer = new VisualStyleRenderer("MENU", (int)MENUPARTS.MENU_POPUPITEM, (int)POPUPITEMSTATES.MPI_HOT);
   var m = renderer.GetMargins(e.Graphics, MarginProperty.SizingMargins);
   // etc...
}

我总是得到内存损坏错误