WinForms Flackern beim Zeichnen Bild auf Taskbar
-
01-10-2019 - |
Frage
Im Moment bin Zeichnung habe ich ein kleines 16x16 Bild auf der Titelleiste von meinem Fenster. Es funktioniert gut, außer für eine widerliche Flimmern, dass ich herausfinden kann nicht, wie loswerden.
Ich bin einfach das Bild wie diese Zeichnung:
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
Es ist die gesamte Titelleiste neu zu streichen jedes Mal, wenn etwas auf sie geändert wird (Klick, Mouseover die Ecke Knöpfe, usw.) und sein während der Repaint ich das Flimmern bekommen.
Noch jemand jemals dieses Problem bekommen?
Lösung
Im Lichte der vorherigen Kommentare zu diesem Thema habe ich entschieden, dass es nicht wirklich erstrebenswert. Der Flackereffekt würde nicht weggehen, wenn ich vollständig von Hand auf die Titelleiste ziehen, die eine klobig Abhilfe ist. Stattdessen habe ich mein Denken auf renoviert worden, wie das Programm in seiner Gesamtheit zu behandeln. Die einzige praktikable Lösung ist es, vollständig die Fenster Grenze zu entfernen und ein psuedo schreitend / bar auf der Oberseite der Form zu ziehen. Siehe http://www.codeproject.com/KB/miscctrl/gTitleBar.aspx
Oder noch besser, lassen Sie einfach die Titelleiste sein.