2

コントロールの WndProc オーバーライドで WM_PAINT と WM_ERASEBKGD のカスタム処理を行っています。

protected override void WndProc(ref Message m)
{
    if (m.Msg == 0xF)
    {
        // [Draw using stored hDC]

        m.Result = (IntPtr)1;
    }
    else if (m.Msg == 0x14)
    {
        m.Result = (IntPtr)1;
    }
    else
        base.WndProc(ref m);
}

1 秒間に約 300 回呼び出されることを除けば、正常に動作します。ベースに処理を許可すると、1 回呼び出されます。私は何を除外していますか?

4

1 に答える 1

4

これは、「ダーティな四角形」がもはやダーティではなく、ペイントされたことを Windows に伝えていないために発生します。そのため、WM_PAINT メッセージが生成され続けます。

これは通常、.NET に組み込まれているデフォルトのメッセージ ハンドラによって呼び出される BeginPaint/EndPaint() で行われます。仮想 OnPaint() メソッドを呼び出します。これをオーバーライドするか、Paint イベントを処理することをお勧めします。何らかの理由でこれを使用したくない場合は、ValidateRect()をピンボークする必要があります。

于 2013-03-10T03:46:09.183 に答える