我有一个设置了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);
}

09-11 23:22