2012-02-13 36 views
0

MFCアプリケーションを継承し、OnPaintに応答するいくつかのオーナー描画ウィジェットを持つウィンドウを持ち、さまざまな描画を行います。MFCカスタムOnPaintが確実に呼び出されない

私は、さまざまなユーザーのアクションに応じて再描画するためのコントロールを強制するために、次のコードがあったことに気づい:

CRect rect; 
m_myControl.GetWindowRect(&rect); 
ScreenToClient(&rect); 
InvalidateRect(&rect, FALSE); 

私はこれがそうのように単純化することができると思っていた:

m_myControl.Invalidate(FALSE); 

しかし、実際には、私がこのようにすると、コントロールペイントはときどき他のものではない。具体的には、ウィンドウ内のコントロールとやりとりしているときに、ときどきmyControlが単なる灰色の塗装になります。コードをより複雑なInvalidateRectスタイルに変更しました。もう一度うまく機能しています。

なぜここに違いがありますか?

+0

コントロールが描画されていない可能性がありますが、代わりに親ウィンドウがそれを行っていますか? –

+0

後者の方法を使用してグレーになるコントロールは、親ウィンドウのOnPaintによって描画されます。コントロールの1つは、それ自体を塗りつぶしても問題はありません。 – StilesCrisis

答えて

1

ウィンドウを無効にすると、そのウィンドウが無効になることはありません。親ウィンドウがコントロールの描画を担当している場合は、コントロールの更新が必要であると伝えていないため、コントロールがトリガーされません。その場合、元のコードは正しいことを行います。

+0

クール、それはそれを説明する!毎日何か新しいことを学ぶ。 – StilesCrisis

関連する問題