OwnerDraw ComboBox с VisualStyles - PullRequest
       17

OwnerDraw ComboBox с VisualStyles

6 голосов
/ 17 декабря 2009

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

1 Ответ

6 голосов
/ 17 декабря 2009

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

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

Это не прямой ответ на ваши проблемы со списком, но в качестве примера того, как использовать 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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...