Carbon 应用程序在取消隐藏时不会收到 kEventWindowDrawContent

Carbon app does not receive kEventWindowDrawContent on unhiding

我注意到我的旧 Carbon 应用程序在取消隐藏应用程序时没有收到 kEventWindowDrawContent。我可以通过在获得 kEventWindowExpanded 事件后重新绘制所有内容来轻松解决此问题,但我仍然对为什么当应用程序从隐藏状态恢复时我的应用程序没有获得 kEventWindowDrawContent 事件感到困惑。

我检查了所有旧的 Apple 文档,没有明确提到当应用程序未隐藏时将发送 kEventWindowDrawContent,但常识表明应该发送它,因为应用程序需要重绘。

不过,我在打开 window 时确实收到了初始 kEventWindowDrawContent 消息,因此事件处理程序必须已正确安装。

有没有人记得这个旧 Carbon 的东西? kEventWindowDrawContent 是否应该在取消隐藏时发送?

这是我从 Apple 工程师那里得到的答案:

kEventWindowDrawContent is sent when the window content has been invalidated. We don’t invalidate window content by default when a window is expanded from minimized state; the window buffer is kept valid while the window is minimized (so that any drawing into the window will be reflected in the window’s Dock tile), so it’s assumed that unless the app explicitly invalidates, there is not any reason to redraw the window just because it’s been expanded.

换句话说:应用程序仍然可以绘制到 window 即使它被最小化。它将被缓冲并在 window 再次展开时自动绘制。所以在这种情况下没有发送 kEventWindowDrawContent 因为 window 缓冲区还没有失效。