0

MFCアプリを継承しましたが、ウィンドウには、OnPaintさまざまな描画に応答して実行する所有者描画ウィジェットがいくつかあります。

さまざまなユーザーアクションに応じてコントロールを強制的に再描画するために、次のコードがあることに気付きました。

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

私はこれを次のように単純化できると思いました:

m_myControl.Invalidate(FALSE);

しかし、実際には、このようにすると、コントロールはペイントすることがありますが、他のペイントはペイントしません。具体的には、ウィンドウ内のコントロールを操作しているときに、myControl灰色で塗りつぶされてしまうことがあります。コードをより複雑なInvalidateRectスタイルに戻しましたが、再びうまく機能しています。

なぜここに違いがあるのでしょうか?

4

1 に答える 1

1

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

于 2012-02-13T20:30:21.260 に答える