Vb.net Winforms在任务栏上绘制图像时闪烁

Vb.net Winforms在任务栏上绘制图像时闪烁,vb.net,com-interop,wm-paint,Vb.net,Com Interop,Wm Paint,现在,我正在窗口的标题栏上绘制一个16x16的小图像。它工作得很好,除了一个讨厌的闪烁,我不知道如何摆脱 我只是画了这样的图像: 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

现在,我正在窗口的标题栏上绘制一个16x16的小图像。它工作得很好,除了一个讨厌的闪烁,我不知道如何摆脱

我只是画了这样的图像:

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
每次在标题栏上更改内容时,它都会重新绘制整个标题栏。单击,鼠标移到角落按钮上,等等。在重新绘制的过程中,我会看到闪烁


还有人遇到过这个问题吗?

根据之前对这个问题的评论,我认为这个问题不值得研究。闪烁效果不会消失,除非我完全手动绘制标题栏,这是一个笨拙的解决办法。相反,我重新思考了如何处理整个程序。唯一可行的解决方案是完全删除windows边框,并在窗体顶部绘制一个psuedo边框/条。看

或者更好的办法是,让标题栏保持不变