【发布时间】:2009-10-07 14:04:45
【问题描述】:
我有一个 NSWindow 的 NSBorderlessWindow 子类,它具有透明且不透明的背景(因此它的外观不是矩形)。当我单击它们时,我添加了我自己的按钮作为关闭和最小化按钮,但由于某种原因,窗口不会像正常的那样响应 CMD-W 或 CMD-M。我将我的 NSWindow 子类设置为返回 YES 到 canBecomeKeyWindow 和 canBecomeMainWindow。
当您创建新项目时,我的 NIB 中仍然包含所有标准菜单项 - 包括“窗口”菜单中的“最小化”项,并定义了默认的快捷方式 CMD-M。它连接到发送 performMiniaturize: 给第一响应者。但是,当应用程序运行时它没有启用,所以它似乎必须询问窗口是否可以最小化并且窗口说不或什么。 (我对 OSX/Cocoa 还是很陌生。)
我错过了什么?
另外,也许这是相关的,我的无边框窗口启用了阴影 - 但与普通的标题窗口不同,当我通过单击将窗口设置为活动/前窗口时,阴影不会改变。通常,以 OSX 为中心的窗口具有稍大/更暗的阴影以使其更加突出,但我的窗口从不改变阴影。就像我缺少一些东西来让操作系统将此窗口视为真实/普通/主窗口或其他东西,结果我失去了阴影变化和正常运行的 CMD-W/CMD-M。
【问题讨论】:
-
我认为如果你将选择器从 -performMiniaturize: 更改为 -miniaturize: 你会得到你想要的。 -performMiniaturize:不仅将窗口发送到 Dock,它还会暂时突出显示小型化按钮。这可能就是让你束手无策的原因。
-
您不应该使用 NS 前缀。这是 Apple 在 Foundation、AppKit 和 Core Data 中的类的前缀。如果 Apple 添加了 NSBorderlessWindow 类,即使是私有的,他们的类和你的类都会发生冲突。制作自己的前缀并使用它。
-
Peter:这个类没有命名为 NSBorderlessWindow,它是一个使用 NSBorderlessWindowMask 标志的 NSWindow。我承认这措辞很糟糕。 :)
标签: objective-c cocoa