タスクバーに画像を描画しながら、ウィンフォームがちらつきます

StackOverflow https://stackoverflow.com/questions/3669704

  •  01-10-2019
  •  | 
  •  

質問

今、私は窓のタイトルバーに小さな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

その上に何かが変更されるたびにタイトルバー全体を塗り直します(クリック、コーナーボタンのマウスオーバーなど)、そして塗り直しの間にちらつきがあります。

他の誰かがこの問題を抱えていますか?

役に立ちましたか?

解決

これに関する以前のコメントに照らして、私はそれが本当に追求する価値がないと決めました。私が手動でタイトルバーを完全に描いていない限り、フリッカー効果は消えません。これは不格好な回避策です。代わりに、プログラム全体をどのように処理するかについての考えをやり直します。唯一の実行可能な解決策は、窓の境界を完全に取り外し、フォームの上にPsuedoの境界線/バーを描くことです。見る http://www.codeproject.com/kb/miscctrl/gtitlebar.aspx

または、さらに良いことに、タイトルバーを作ってください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top