编码
var renderer = new VisualStyleRenderer(VisualStyleElement.Menu.Item.Normal);
返回以下消息
给定的 Class、Part 和 State 的组合不是由当前的视觉样式定义的。
在 Windows 8.1 机器上。
有人知道为什么以及如何解决这个问题吗?
编码
var renderer = new VisualStyleRenderer(VisualStyleElement.Menu.Item.Normal);
返回以下消息
给定的 Class、Part 和 State 的组合不是由当前的视觉样式定义的。
在 Windows 8.1 机器上。
有人知道为什么以及如何解决这个问题吗?
好的,在Hans Passant的帮助下,我查看了 vsstyle.h 文件(在此处找到了副本)并一直在使用这些常量。
如果您查看枚举 MENUPARTS,我发现“MENU”类路径适用于所有部分,但名称中带有 *_TMSCHEMA 的部分除外(这是 VisualStyleElement.Menu 列表中的结构映射到的部分)
所以,我最终使用了 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.GetMargins 方法坏了,因为如果我这样做
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...
}
我总是收到内存损坏错误。