【问题标题】:lock the position of an nswindow锁定一个nswindow的位置
【发布时间】:2009-05-08 14:20:55
【问题描述】:

是否可以锁定 nswindow 的位置?我不是要 setIgnoresMouseEvents。我需要阻止用户移动窗口,但他应该仍然可以使用 nstoolbar。

提前谢谢 --molter

【问题讨论】:

  • 永远不要那样做。如果您正在编写自助服务终端类型的应用程序,请遵循编写自助服务终端类型应用程序的指南。
  • 你会怎么做呢?目前我有某种 remote 来控制窗口(开始流式处理;结束它等)……我想减少我的应用程序的面板、窗口和视图的数量有工具栏来控制窗口可能会很好……
  • 在这种情况下,您为什么不希望用户移动工具栏?如果他们想将其移动到另一个空间或另一个屏幕怎么办?如果用户将笔记本电脑移动到新位置时屏幕分辨率发生变化怎么办?
  • 两年后,由于 Lion 的全屏模式,这与我有关。我有一个带有自定义标题栏的无边框窗口,类似于 App Store。但是,在全屏模式下,它仍然可以拖动。 arri 的回答很完美。

标签: cocoa nswindow


【解决方案1】:

对于“正常”情况,我会同意 Jason 的观点。 但我认为在某些特殊情况下可以适当地做这样的事情。 显然苹果也这么认为;从 10.6 开始 - 你需要做的就是调用 NSWindows'

- (void)setMovable:(BOOL)flag

或覆盖

- (BOOL)isMovable;

在您的 NSWindow 子类中更改窗口的可移动性。

如果这不可用,Quartz 事件服务 API (documentation) 提供了防止窗口移动的方法。 一种方法是在用户开始拖动窗口时安装事件点击并操纵传入事件以仅包含初始鼠标按下位置而不是更新的(实际)位置。

【讨论】:

  • 对这个问题有很好的看法.. 你认为新的 lion window resize api 可以作为脆旧的石英事件处理程序的替代品......比如说如果想限制寡妇的移动,比如说,只有一个运动轴?
【解决方案2】:

您应该听从 Jason 的建议并使用自助服务终端模式。看到这个technical note就可以了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 2012-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多