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

时间:2010-09-08 16:06:15

标签: 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 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

每次更改内容时都会重新绘制整个标题栏(单击,鼠标悬停在角落按钮等),并且在重新绘制过程中我得到了闪烁。

其他人有没有遇到过这个问题?

1 个答案:

答案 0 :(得分:0)

根据先前对此的评论,我认为它并不值得追求。除非我完全手动绘制标题栏,否则闪烁效果不会消失,这是一个笨重的解决方法。相反,我重新思考了如何完整地处理程序。唯一可行的解​​决方案是完全删除窗口边框并在窗体顶部绘制一个伪边框/条。见http://www.codeproject.com/KB/miscctrl/gTitleBar.aspx

或者更好的是,让标题栏为。

相关问题