WinForms мерцает во время рисования изображения на панели задач
-
01-10-2019 - |
Вопрос
Прямо сейчас я рисую небольшое изображение 16x16 на строке заголовка моего окна. Это работает красиво, за исключением отвратительного мерцания, которое я не могу выяснить, как избавиться от.
Я просто рисую изображение, как это:
Protected Overrides Sub WndProc(ByRef m As Message)
If m.Msg = WM_SIZE Then
wnd_size = New Size(New Point(CInt(m.LParam)))
End If
If m.Msg = WM_ACTIVATE _
OrElse m.Msg = WM_SIZE _
OrElse m.Msg = WM_SYNCPAINT _
OrElse m.Msg = WM_NCACTIVATE _
OrElse m.Msg = WM_NCCREATE _
OrElse m.Msg = WM_NCPAINT _
OrElse m.Msg = WM_NCACTIVATE _
OrElse m.Msg = WM_NCHITTEST _
OrElse m.Msg = WM_PAINT _
OrElse m.Msg = WM_MOUSEMOVE Then
Dim g As Graphics = Graphics.FromHdc(CType(GetWindowDC(CInt(Handle)), IntPtr))
g.DrawImage(My.Resources.drag, 0, 0, 16, 16)
End If
MyBase.WndProc(m)
End Sub
Его перекрашивание всей строки заголовка каждый раз что-то изменено на нем (нажмите, наведите кнопку MUSICOWER угловые кнопки и т. Д.), И ее во время перекраски я получаю мерцание.
Кто-нибудь еще делает эту проблему?
Решение
В свете предыдущих комментариев по этому, я решил, что ее на самом деле не стоит преследовать. Эффект мерцания не уйдет, если я не полностью нарисую заголовок вручную вручную, что является неуклюжем обходным путем. Вместо этого я переделал свое мышление о том, как справиться с программой полностью. Единственным жизнеспособным решением является полное удаление границы Windows и нарисовать границу PSEDO / BAR сверху формы. Видеть http://www.codeproject.com/kb/miscctrl/gtitlebar.aspx.
Или еще лучше, просто позвольте заголовому бару.