检测Mac OS X窗口何时被调整大小或移动

5

我正在编写一个应用程序,它必须知道任何窗口何时被调整大小或移动。

我已经查看了通知,但似乎它并没有做到我所期望的。

你有什么想法可以帮助我实现这个功能吗?

5个回答

5
给你的窗口委派一个代理。 NSWindowDelegate协议windowWillResize:toSize:windowWillMove:方法。

1
它适用于所有的Windows吗?我的意思是不仅仅是应用程序中的那一个? - AP.

2
鉴于您对卡尔答案的回复,我建议使用辅助功能API,它可以为您提供所有窗口(而不仅仅是您的应用程序)的访问权限(我相信还包括框架更改通知)。

很遗憾,虽然这是个好主意,但通知会在完成任务时而非移动或调整大小时被触发 :( - AP.
这是你可以为其他应用程序窗口做的最好的事情,可惜了。 - Joshua Nozzi

1
如果您想要窗口大小/排序,请查看CGWindow.h。CGWindowListCreateDescriptionFromArray()可能是您想要的。
NSWindowList()对于窗口列表也很有用。

0

-1
在Swift中,我的AppDelegate看起来像这样:
func applicationDidFinishLaunching(notification: NSNotification) {
    // Set NSWindowDelegate to respond to windowWillResize
    window.delegate = self
}

func windowWillResize(sender: NSWindow, toSize frameSize: NSSize) -> NSSize {
    println(frameSize)
    return frameSize
}

AppDelegate类中没有窗口属性。 - Lubos
然后确保AppDelegate实现了NSWindowDelegate - user16217248

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接