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 回答