Перекрывающая краска combobox, используя WndProc - PullRequest
3 голосов
/ 27 мая 2009

Я переопределил WndProc ComboBox, и я рисую свое собственное поле со списком, фрагмент кода ниже:

Protected Overrides Sub WndProc(ByRef m As Message)

    MyBase.WndProc(m)
    Select Case m.Msg
        Case &HF

            Dim g As Graphics = Me.CreateGraphics

            If ComboBoxRenderer.IsSupported Then
                Dim pTextBoxRect As New Rectangle(Me.ClientRectangle.X, Me.ClientRectangle.Y, Me.ClientRectangle.Width, Me.ClientRectangle.Height)
                ComboBoxRenderer.DrawTextBox(g, pTextBoxRect, _tbState)
                 ' .... and so on
    End Select
End Sub

Хотя старый элемент управления все еще окрашивается, так как мое поле со списком просто перекрывает старый чертеж. Есть ли способ остановить его, рисуя поле со списком по умолчанию?

Спасибо, Rob

1 Ответ

2 голосов
/ 27 мая 2009

Метод, который вы используете, является единственным способом сделать это, но вы правы, он отрисовывается поверх стандартного комбинированного списка, и нет никакого способа обойти это, все еще используя элемент управления комбинированного списка.

Чтобы по-настоящему получить нарисованный комбобокс, вам нужно подняться на один уровень выше в дереве объектов, но затем вам придётся воссоздать почти всю функциональность комбобокса.

...