0

現在、ウィンドウのタイトル バーに小さな 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

何かが変更されるたびにタイトルバー全体を再描画します(クリック、コーナーボタンへのマウスオーバーなど)。再描画中にちらつきが発生します。

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

4

1 に答える 1

0

これに関する以前のコメントに照らして、私はそれが本当に追求する価値がないと判断しました。タイトルバーを手動で完全に描画しない限り、ちらつきの効果は消えません。これは不格好な回避策です。代わりに、プログラム全体をどのように処理するかについての考えをやり直しました。唯一の実行可能な解決策は、ウィンドウの境界線を完全に削除し、フォームの上に疑似境界線/バーを描画することです。http://www.codeproject.com/KB/miscctrl/gTitleBar.aspxを参照してください

または、さらに良いことに、タイトルバーをそのままにします。

于 2010-09-22T17:14:35.750 に答える