Last Updated 2012/01/22
Programming Tips Visual C++ MFC CView  索 引 
OnDrawとOnPaint
2004/03/25

OnDraw() と OnPaint() はどう違うのか?

OnPaint() は WM_PAINT に対したハンドラであり,OnDraw() はドキュメントビューアーキテクチャの MFC アプリケーションにて実装される.OnPaint() からも呼ばれる.
ドキュメントビュー構造のアプリケーションでは通常 OnPaint() はオーバーライドしない.
ダイアログベースのアプリケーションは OnDraw() は存在せず OnPaint() のみとなる.
OnDraw() は CView::OnDraw() であり CView のメンバ関数となっており,OnPaint() は CWnd::OnPaint() であり CWnd のメンバ関数となっているからである.
ダイアログベースに OnDraw() が存在しないのはビュークラス(CView)が存在しないからである.
そのことからも OnPaint() はウィンドウの描画のみに限られたものであり,OnDraw() はウィンドウ描画,印刷,印刷プレビューなどに共通して使うものである.

SDI や MDI アプリケーションの描画処理は OnDraw() で行い(しして印刷や印刷プレビューも共通のコードとなる),ダイアログベースでは OnPaint() にて描画処理を行う.


また,WM_PAINT はプログラムからは絶対に直接呼んではいけない.WM_PAINT は Windows が発行するものである.
では,画面を更新するにはどうしたらよいのか?
CWnd::InvalidateRect() や CWnd::UpdateWindow() を使用すればよい.


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

DSS ProgrammingTipsCGI Ver2.02