Winforms parpadeo mientras que el dibujo de la imagen en la barra de tareas
-
01-10-2019 - |
Pregunta
Ahora estoy dibujando una pequeña imagen de 16x16 en la barra de título de la ventana. Funciona muy bien, excepto por un parpadeo desagradable que no puedo encontrar la manera de deshacerse de él.
Simplemente estoy dibujando la imagen como esta:
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
Su repintar toda la barra de título cada vez que algo ha cambiado en él (clic, mouseover los botones de la esquina, etc.), y su durante el repintado consigo el parpadeo.
A alguien más consigue nunca este problema?
Solución
A la luz de los comentarios anteriores sobre esto, he decidido que no es realmente vale la pena. El efecto de parpadeo no irá sin que yo la saco por completo la barra de título de forma manual, lo que es una solución torpe. En su lugar he rehecho mi forma de pensar acerca de cómo manejar el programa en su totalidad. La única solución viable es la de eliminar por completo la frontera ventanas y dibujar un / bar frontera pseudo en la parte superior del formulario. Ver http://www.codeproject.com/KB/miscctrl/gTitleBar.aspx
O mejor aún, simplemente dejar que la barra de título sea.