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() |
|