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?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top