2010-09-08 60 views
0

现在我正在窗口的标题栏上绘制一个小的16x16图像。它很好地工作,除了一个令人厌恶的闪烁,我不知道如何摆脱。Winforms在任务栏上绘制图像时闪烁

我只是画这样的形象:

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 

其重绘整个标题栏,每次的东西是它改变了(点击,鼠标悬停角落按钮等),其重绘时我得到了闪烁。

其他人都会遇到这个问题吗?

回答

0

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

或更好的是,只是让标题栏。