Мерцание Winforms при рисовании изображения на панели задач - PullRequest
0 голосов
/ 08 сентября 2010

Прямо сейчас я рисую маленькое изображение 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

Его перерисовывается вся строка заголовка каждый раз, когда что-то меняется на ней (щелчок мышью над угловыми кнопками и т. Д.), ИВо время перекраски у меня появляется мерцание.

Кто-нибудь еще сталкивался с этой проблемой?

1 Ответ

0 голосов
/ 22 сентября 2010

В свете предыдущих комментариев по этому поводу, я решил, что его не стоит преследовать.Эффект мерцания не исчезнет, ​​если я не буду полностью рисовать строку заголовка вручную, что является неуклюжим обходным решением.Вместо этого я переделал свои мысли о том, как работать с программой в полном объеме.Единственное жизнеспособное решение - полностью удалить границу окна и нарисовать границу / полосу псевдо поверх формы.См. http://www.codeproject.com/KB/miscctrl/gTitleBar.aspx

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

...