3

私の wxWidgets (wxPython) アプリでは、50 ミリ秒のタイマーを使用してポーリングを行い、変更があればウィンドウを更新しています。wxWindow.Refresh変更が検出されると、ウィンドウを更新するために呼び出され、ウィジェットの実際の更新はEVT_PAINTハンドラーで行われます。とにかくユーザーがウィンドウを見ていなければ、ペイントやタイマーを無効にできればいいと思います。ただし、ウィンドウがアイコン化されているか、別のウィンドウの背後に隠されている場合でも、 EVT_PAINT は引き続き起動されます。

ウィンドウが現在画面に表示されていないかどうかを検出する方法、または EVT_PAINT イベントが不必要に発生するのを防ぐ方法はありますか?

IsActiveウィンドウにフォーカスがあるかどうかをテストするメソッドとイベントがありEVT_ACTIVATEますが、フォーカスされていなくてもウィンドウが表示されている場合は、ウィンドウを更新し続けたいと思います。関数のwxWindow.IsShownファミリーは役に立たず、非表示/アイコン化されたウィンドウに対して True を返します。

4

1 に答える 1

0

IsShownOnScreen()は、アイコン化されたケースに役立ちます。編集:しかし、実際にはそうではありません

wxEVT_ICONIZEまたは、ウィンドウが最小化されたことを検出するためにトラップすることもできます。

しかし正直なところ、別のウィンドウの背後に隠れているウィンドウを更新しても、再描画が行われることにかなり驚いています。前面のウィンドウが透明でない場合、これは実際には発生しないはずです。

于 2013-05-15T17:03:33.447 に答える