VisualStyleRenderer返回菜单项错误
本文关键字:错误 菜单项 返回 VisualStyleRenderer | 更新日期: 2023-09-27 18:13:08
代码
var renderer = new VisualStyleRenderer(VisualStyleElement.Menu.Item.Normal);
返回以下消息
类、部件和状态的给定组合不是由当前的视觉样式。
在Windows 8.1的机器上。
有谁知道为什么以及如何解决这个问题吗?
在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...
}
我总是得到内存损坏错误