WinForms Flickering Mentre Disegno Immagine sulla barra delle applicazioni
-
01-10-2019 - |
Domanda
In questo momento sto disegnando un'immagine di un piccolo 16x16 sulla barra del titolo della mia finestra. E funziona bene, tranne che per un guizzo odioso che io riesco a capire come sbarazzarsi di.
Sono semplicemente disegnare l'immagine in questo modo:
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
La sua ridipingere l'intera barra del titolo ogni volta che qualcosa è cambiato su di esso (click, mouseover i pulsanti d'angolo, ecc), e la sua durante il ridisegno ottengo il tremolio.
Chiunque altro mai arrivare a questo problema?
Soluzione
Alla luce delle precedenti commenti su questo, ho deciso che non è davvero la pena di perseguire. L'effetto di sfarfallio non andrà via a meno che io traggo completamente la barra del titolo manualmente, che è una soluzione goffa. Invece ho rifatto il mio pensiero su come gestire il programma nella sua interezza. L'unica soluzione praticabile è quella di rimuovere completamente il confine finestre e disegnare un / bar pseudo bordo sulla parte superiore del modulo. Vedere http://www.codeproject.com/KB/miscctrl/gTitleBar.aspx
O meglio ancora, lasciare che la barra del titolo sia.