OwnerDraw ComboBox с VisualStyles

У меня есть ComboBox, что я установил DrawMode = DrawMode. OwnerDrawFixed. Затем я обрабатываю событие OnDrawItem, и все работает отлично. Однако это выглядит очень отличающимся от стандартного ComboBox, потому что мой, кажется, не представляется с помощью VisualStyles. Я должен сделать что-то для специфического включения рендеринга VisualStyle для моего владельца оттянутое управление? Я попробовал SetWindowTheme на своем управлении, но я не уверен что класс темы отправить. Любая справка очень ценилась бы.Спасибо!

6
задан Jon Tackabury 17 December 2009 в 06:37
поделиться

1 ответ

Обратной стороной розыгрыша владельцем является то, что когда вы включаете его, владелец (вы) должен все рисовать. Вы почти полностью предоставлены сами себе.

Если вам нужны визуальные стили, вы должны напрямую вызывать VisualStyles API, чтобы делать то, что вы хотите. Если вы хотите отображать выбранные, сфокусированные, включенные / отключенные состояния, вам нужно написать код, чтобы справиться со всеми ними.

Это не прямой ответ на ваши проблемы с полем со списком, а как пример того, как используйте VisualStyles, вот как я использовал VisualStyles в нарисованном владельцем TreeView для рисования значка «плюс / минус»:

// 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);
}
6
ответ дан 17 December 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: