VC++中ondrawはいつ呼び出しましたか?

2179 ワード

http://blog.csdn.net/lary2360433/article/details/6405737
問題:私はビューで絵や文字を描いていますが、ウィンドウが変わったらなぜなくなりましたか?OnDraw()とOnPaint()の両方が上の問題を解決していますが、何が違いますか?あなたのウィンドウが変更されると無効なエリアが発生しますので、この無効なエリアは再描画が必要です.一般Windowsは2つのメッセージを返信します.WM_.PAINTとWM_NCPAINT(お客様以外のエリアに変更があることをお知らせします).お客様のエリアではないリメイクシステムは自分で作りましたが、お客様のエリアのリフォームは自分で行う必要があります.これはOnDraw()やOnPaint()を使ってウィンドウを描き直す必要があります.OnDraw()とOnPaint()の違いは何ですか?まず、Ciew類はCWnd類から派生していることを明確にします.OnPaint()はCWndのクラスメンバーであり、同時にWM_に応答する.PAINTメッセージ.OnDraw()はCVIEWのメンバー関数であり、メッセージに応答する機能はない.これはなぜVCのプログラムコードを使っていますか?ビュークラスではOnDrawだけOnPaintがないからです.第二に:グラフィックスを画面に描画したり表示するには、まずデバイス環境DCを確立する必要があります.実はDCは一連のグラフィックオブジェクトと関連する属性、すなわちデバイス環境の属性のセットを定義しています.これらの設定は印刷デバイスを含んでいます.ディスプレイデバイス、出力デバイスなど、これらのグラフィカルオブジェクトは以下の通りです.(直線を描くためのもの)、ブラシ(図形描画と塗りつぶし用のもの)、ビットマップ(画面のコピーやスクロール用のもの)、カラーパレット(利用可能な色セットを定義するためのもの)、トリミングエリア(トリミングやその他の操作用のもの)、パス(図形描画や図面操作用のもの).
MFCは、CPaintDCクラスとCWindwoDCクラスのリアルタイム応答を提供し、CPaintDCは再描画をサポートしている.ビューが無効になると(サイズの変更、移動、カバーなどを含む)、WindowsはWMuPAINTメッセージを送信します.このビューのOnPaint処理関数は、CPaintDC類のDCオブジェクトを作成することにより、メッセージを鳴らしてビューのOnDrawメンバー関数を呼び出すものです.書き換えOnPaint処理メンバー関数を作成する必要はありません.
 
///CView          

void CView::OnPaint(){

CPaintDC dc(this); 

OnPreparDC(&dc);

OnDraw(&dc); //   OnDraw}

 
 
OnPaintでは最後にOnDrawを呼び出すので、OnDraw関数で描画するのが一般的です.以下は典型的なプログラム////ビューの図形描画コードです.まずドキュメントに向かうポインタを検索して、DCで図形描画を行います.
void CMyView::OnDraw( CDC* pDC ) 

{ CMyDoc* pDoc = GetDocument(); 

CString s = pDoc->GetData(); // Returns a CString CRect rect;

GetClientRect( &rect ); 

pDC->SetTextAlign( TA_BASELINE | TA_CENTER );

pDC->TextOut( rect.right / 2, rect.bottom / 2, s, s.GetLength() );}

 
 
したがって、私たちは一般的にOnPaintでウィンドウの顧客エリアを維持します.(例えば、私たちのウィンドウの顧客エリアに背景画像を追加します.)OnDrawでビューの顧客エリアを維持します.もちろん上の規則に従わなくてもいいです.目的を達成しても大丈夫です.どうすればいいですか?Validate Rgn()、Validate Rect()関数による強制的な再描画ウィンドウは、具体的にはMSDNを参照してください.
 
 オススメのブログがいいです.http://www.cnblogs.com/kzloser/.