【问题标题】:Winforms Flickering While Drawing Image on Taskbar在任务栏上绘制图像时 Winforms 闪烁
【发布时间】:2010-09-08 16:06:15
【问题描述】:

现在我正在窗口的标题栏上绘制一个 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

每次更改某些内容(单击、鼠标悬停角落按钮等)时,它都会重新绘制整个标题栏,并且在重新绘制期间我会闪烁。

其他人遇到过这个问题吗?

【问题讨论】:

    标签: vb.net com-interop wm-paint


    【解决方案1】:

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

    或者更好的是,只保留标题栏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-07
      • 2010-09-06
      • 1970-01-01
      • 2022-11-09
      • 1970-01-01
      • 2011-07-04
      • 2018-12-10
      相关资源
      最近更新 更多