2010-12-08 11 views
0

私は、Win32 APIの上に実装されたC++(MFCなし)で書かれた社内APIを持っています。私のアプリはWM_PAINT呼び出しごとにウィンドウ全体を描画しています。私はダーティ/インヴァール領域だけを見つけることができる方法があるので、ダーティ領域と交差するビューで描画するように描画関数を最適化できます。WindowProcがWM_PAINTメッセージを受信したときにウィンドウの汚れた領域を見つける方法...?

私はBeginPaint - EndPaint文の間で次のコードを試してみましたが、ひどく失敗しました。全体の窓は黒だった。最適化フラグを0に設定すると、ウィンドウはきれいに描画されますが、描画が遅すぎます。助言がありますか...??。

#if Optimize 
// get the inval region and pass it down 
    HRGN invalRegion = CreateRectRgn(0,0,0,0); 
    int retVal = ::GetClipRgn(myHDC,invalRegion); 
    Assert (retVal != -1); 
    if(retVal == 0)   
     return;  // nothing to draw. 
    else if(retVal == 1)   
     Draw(invalRegion); // a valid dirty region handle. 
    else 
#endif 
     Draw(NULL); // this results in drawing calls to all views in the window. 

答えて

4

あなたはPAINTSTRUCTからrcPaint RECTを使用してみましたか? GetClipRgnのdocsは具体的にはではなく、はBeginPaintによって作成されたクリッピング領域を指しますが、SelectClipRgnで明示的に選択されたクリッピング領域のみを参照します。

関連する問題