我有一个设置了DrawMode = DrawMode.OwnerDrawFixed的ComboBox。然后,我处理OnDrawItem事件,一切正常。但是,它看起来与标准的ComboBox完全不同,因为我的似乎没有使用VisualStyles进行渲染。我是否需要做一些事情来专门为我的所有者绘制的控件启用VisualStyle渲染?我已经在控件上尝试了SetWindowTheme,但是我不确定要发送哪个主题类。任何帮助将非常感激。谢谢!
最佳答案
所有者绘制的缺点是,当您打开它时,所有者(您)必须绘制所有内容。您几乎完全是自己一个人。
如果要使用视觉样式,则必须直接调用VisualStyles API来执行所需的操作。如果要显示选定的,集中的,启用/禁用的状态,则必须编写代码来处理所有这些状态。
这不是您的组合框问题的直接答案,但是作为如何使用VisualStyles的示例,以下是我如何在所有者绘制的TreeView中使用VisualStyles绘制加号/减号图标的方法:
// Draw Expand (plus/minus) icon if required
if (ShowPlusMinus && e.Node.Nodes.Count > 0)
{
// Use the VisualStyles renderer to use the proper OS-defined glyphs
Rectangle expandRect = new Rectangle(iconLeft-1, midY - 7, 16, 16);
VisualStyleElement element = (e.Node.IsExpanded) ? VisualStyleElement.TreeView.Glyph.Opened
: VisualStyleElement.TreeView.Glyph.Closed;
VisualStyleRenderer renderer = new VisualStyleRenderer(element);
renderer.DrawBackground(e.Graphics, expandRect);
}