WinForms мерцает во время рисования изображения на панели задач

StackOverflow https://stackoverflow.com/questions/3669704

  •  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.

Или еще лучше, просто позвольте заголовому бару.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top