Question

En ce moment, je dessine une petite 16x16 image sur la barre de titre de la fenêtre. Il fonctionne très bien, sauf pour un scintillement désagréable que je ne peux pas comprendre comment se débarrasser.

Je dessine simplement l'image comme ceci:

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

Son repeindre toute la barre de titre chaque fois que quelque chose change sur elle (clic, mouseover les boutons d'angle, etc.), et son pendant la repeindre je reçois le scintillement.

Quelqu'un d'autre jamais obtenir ce problème?

Était-ce utile?

La solution

À la lumière des commentaires précédents sur ce point, je l'ai décidé que ce ne est pas vraiment POURSUITE la peine. L'effet de scintillement wont disparaître à moins que je dessine complètement la barre de titre manuellement, ce qui est une solution de contournement maladroites. Au lieu de cela, je l'ai refait ma façon de penser sur la façon de gérer le programme dans son intégralité. La seule solution viable est de supprimer complètement les fenêtres frontière et tracer une frontière psuedo / bar au-dessus de la forme. Voir http://www.codeproject.com/KB/miscctrl/gTitleBar.aspx

Ou mieux encore, il suffit de laisser la barre de titre soit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top