Microsoft Windows允许程序员使用像DrawThemeBackground和这样的函数使用当前主题的外观来绘制GUI元素DrawThemeText.这些元素由Class,Part和State指定,如MSDN 的Parts and States页面所述.
不幸的是,页面信息量不大(完全没有!).所以问题是:是否存在所有这些部分和状态的参考,最好是元素的图像(在默认的Windows Vista/7主题中)?
我有自己的TreeView控件,完全是OwnerDraw'n:
myTreeView.DrawMode = TreeViewDrawMode.OwnerDrawAll;
Run Code Online (Sandbox Code Playgroud)
我试图实现的是根据当前的资源管理器主题绘制打开/关闭的字形.特别是在Vista和Win7盒子上,我希望看到新的支架(黑色三角形)而不是加号/减号.我知道,对于非OwnerDraw'n TreeView,这可以通过以下方式实现:
myTreeView.HandleCreated += delegate(object sender, EventArgs args)
{
MyNativeMethods.SetWindowTheme(myTreeView.Handle, "explorer", null);
};
Run Code Online (Sandbox Code Playgroud)
我认为VisualStyleRenderer让我绘制主题感知的字形:
VisualStyleRenderer r = new VisualStyleRenderer(VisualStyleElement.TreeView.Glyph.Opened);
r.DrawBackground(e.Graphics, e.Bounds);
Run Code Online (Sandbox Code Playgroud)
不幸的是,上面的代码在所有情况下都会绘制减号.看起来VisualStyleRenderer不尊重主题设置.
有人可以对此有所了解吗?谢谢!