Last Updated 2012/01/22
Programming Tips Visual C++ MFC CView  索 引 
ループ中のInvalidateRect()
2004/04/08

以下の関数を実行しても描画はいっこうにされない.

    for( i = 1; i <= 100; i++ ) {
        描画処理
        InvalidateRect();
    }

InvalidateRect() はウィンドウの無効領域を設定する.無効領域が設定されたらシステムは WM_PAINT を該当のウィンドウに送信する.
上記ではループ中に InavalidateRect() をしていて WM_PAINT は送信されているが,ループを抜けるまでは WM_PAINT ハンドラが実行されないので描画されないという事態におちいっている.

InvalidateRect() の直後に UpdateWindow() を呼べば解決するはず.
UpdateWindow() はシステムが直接 WM_PAINT のハンドラを呼び出すので描画はその場で行われる.


参照
OnDrawとOnPaint
InvalidateRect()の使い方
前後のTips
ループ中のInvalidateRect()

DSS ProgrammingTipsCGI Ver2.02