objective-c – 单击按钮而不是抬起窗口

objective-c – 单击按钮而不是抬起窗口,第1张

概述iTunes迷你播放器(仅举一个例子)支持点击,当使用播放/暂停和音量控制时,应用程序不会被带到前面. 这是怎么做到的? 我一直在查看Apple的文档,并且有一点点可以继续,在Cocoa Event-Handling Guide, Event Dispatch它声明: Some events, many of which are defined by the Application Kit (ty iTunes迷你播放器(仅举一个例子)支持点击,当使用播放/暂停和音量控制时,应用程序不会被带到前面.

这是怎么做到的?

我一直在查看Apple的文档,并且有一点点可以继续,在Cocoa Event-Handling Guide,Event Dispatch它声明:

Some events,many of which are defined by the Application Kit (type NSAppKitdefined),have to do with actions controlled by a window or the application object itself. Examples of these events are those related to activating,deactivating,hIDing,and showing the application. NSApp filters out these events early in its dispatch routine and handles them itself.

因此,从我有限的理解(How an Event Enters a Cocoa,Application)继承NSApplication和覆盖
– (voID)sendEvent:(NSEvent *)theEvent应该捕获每个鼠标和键盘事件,但仍然会在单击时引发窗口.因此,在NSApplication看到事件之前窗口会被提升,或者我错过了其他内容.

我看过Matt gallagher的Demystifying NSApplication by recreating it,不幸的是Matt没有报道事件队列,所以除此之外,我很难过.

任何帮助将不胜感激,谢谢.

编辑添加:在Lloyd’s Lounge找到一个帖子,他在那里谈到同样的问题并链接到CocoaBuilder,capture first right mouse down的帖子.我正在尝试在那里提供的代码,在一些摆弄并重新激活[theEvent类型]的NSLog之后,正在捕捉鼠标左键活动.

现在,左键单击窗口将其向前移动会生成一系列事件类型,13,1,这些是NSAppKitdefined,NSleftMouseDown和NSAppKitdefined.我可以过滤掉它们或找到它们的去向吗?

解决方法 这可以通过NSPanel来完成,该NSPanel被设置为在停用时不隐藏并且仅在需要时成为密钥.这也假定你将使用的控件返回YES到-acceptsFirstMouse:; NSbuttons默认情况下这样做.

您可以通过IB为面板关闭隐藏在停用标记上,但是您需要向面板发出-setBecomesKeyOnlyIfNeeded:YES消息以保持它并且应用程序不会按下按钮.

总结

以上是内存溢出为你收集整理的objective-c – 单击按钮而不是抬起窗口全部内容,希望文章能够帮你解决objective-c – 单击按钮而不是抬起窗口所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1005518.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存