问题标签 [nsevent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cocoa - 来自 NSEvent/CGEvent 的设备信息
我的应用程序使用事件点击来捕获键盘事件,我想知道每个事件来自哪个设备(即哪个键盘)。是否有一种设备识别信息以及点击获得的 CGEvent ?我查看了 NSEvent 的方法和各种 CGEventField 键,但它们似乎都不是设备唯一的。有什么帮助吗?
objective-c - 点击按钮而不是提升窗口
iTunes 迷你播放器(仅举一个例子)支持点击,当使用播放/暂停和音量控制时,应用程序不会被带到前面。
这是怎么做到的?
我一直在查看 Apple 的文档,并且在Cocoa Event-Handling Guide 中,Event Dispatch中指出:
一些事件,其中许多是由应用程序工具包(类型 NSAppKitDefined)定义的,与窗口或应用程序对象本身控制的操作有关。这些事件的示例是与激活、停用、隐藏和显示应用程序相关的事件。NSApp 在其调度例程的早期过滤掉这些事件并自行处理它们。
因此,根据我有限的理解(事件如何进入可可,应用程序)子类化 NSApplication 和覆盖
- (void)sendEvent:(NSEvent *)theEvent
应该捕获每个鼠标和键盘事件,但是仍然会在单击时弹出窗口。因此,要么在 NSApplication 看到事件之前引发窗口,要么我错过了其他东西。
我通过重新创建查看了 Matt Gallagher 的 Demystifying NSApplication,不幸的是,Matt 没有涵盖事件队列,所以除此之外,我很难过。
任何帮助将不胜感激,谢谢。
编辑添加:在Lloyd's Lounge找到一个帖子,其中他谈到了同样的问题,并链接到CocoaBuilder 上的帖子,先捕获鼠标右键。我目前正在尝试那里提供的代码,经过一番摆弄并重新激活 [theEvent 类型] 的 NSLog 后,鼠标左键活动被捕获。
现在,左键单击窗口将其向前移动会产生一系列事件类型,13, 1, 13
它们是 NSAppKitDefined、NSLeftMouseDown 和 NSAppKitDefined。我可以过滤掉这些或找到它们的去向吗?
objective-c - 听到 keyUp 事件?:重写 NSView 方法
更新:我现在从 NSView 子类覆盖 NSView keyUp 方法,设置为如下所示的第一响应者,但我仍然没有看到它被调用的证据。
--ORIGINAL POST-- 我是 Cocoa 和 Obj-C 的新手,我正在尝试从我的控制器类(它本身是 NSController 类型)的实现中执行 (void)keyUp:。不过,我不确定这是否是放置它的正确位置。我有一系列类似的按钮,每个按钮都设置为一个唯一的等效键(IB 按钮属性),每个都调用我的 (IBAction)keyInput 方法,然后将每个键的标识传递给另一个对象。这运行得很好,但我也想跟踪每个键的释放时间。
--原始[坏]示例--
失败后,我还尝试将 keyUp 作为 IBAction(而不是 void),就像用户定义的 keyInput 一样,并将其连接到 Interface Builder 中的相应按钮,但随后 keyUp 仅在按键按下而不是时被调用释放时。(我想会发生这种情况。)
请原谅我的菜鸟,但我应该把这个方法放在另一个班级还是做一些不同的事情?不过,无论它在哪里,我都需要它能够访问控制器类拥有的对象。
感谢您提供的任何见解。
cocoa - 可可的 NSView 得到疯狂的 mouseDown 事件?
大家好 - 我有一个 NSView 子类,我在 mouseDown 上以编程方式移动它。哪个有效,但有一个奇怪的副作用:
- 我单击子视图。子视图移开[GOOD]
- 我等一会儿。我不移动鼠标。由于子视图已移动,它不再在我的光标下。
- 我再次点击鼠标。
- 我希望底层窗口能够获得 mouseDown 事件(因为子视图不再在我的光标下),但是我的子视图以某种方式获得了这个事件[ODD]
- mouseDown 事件清楚地表明单击超出了我的子类[ODD]的范围
- mouseDown 事件也清楚地表明点击计数已经增加,即使我在鼠标点击之间等待了几秒钟[ODD]
...必须对我所看到的做出解释。这是我的代码 - 只需创建一个名为“OddMouse”的新 Cocoa 应用程序项目,并将以下内容复制到 OddMouseAppDelegate.h 文件中:
...并将以下内容放入 OddMouseAppDelegate.m 文件中:
[[window contentView] addSubview:[[OddView alloc] init]]; } @结尾
...然后构建,然后运行,然后见证!FWIW,这是我在控制台中看到的:
cocoa - 如何存储(和使用)当前鼠标位置?
存储当前鼠标位置(系统范围)然后(稍后)将鼠标放在该存储点的最佳方法是什么?
[NSEvent mouseLocation]
得到我的位置,我可以用 a 移动鼠标CGEventMouseMoved
,但它们每个都使用不同的坐标系统(我相信 y=0 是 NSEvent 的顶部和 CGEvent 的底部)。
我担心捕获屏幕高度并使用它在两者之间转换的稳健性 - 或者这是最好的方法?
cocoa - 右键单击 NSStatusItem
我有一个NSStatusItem
,我想通过右键单击该项目来弹出一个菜单。我继承了一个 NSView 并覆盖了该- (void)rightMouseDown:(NSEvent *)event
方法。我还实现- (void)mouseDown:(NSEvent *)event
了查看修饰符标志。我的问题是,视图没有收到NSRightMouseDown
-Event。我不知道为什么?任何想法如何获得这个事件?自然,我将自定义视图添加到状态项。
- 更新 -
附加信息:我已将 NSImageView 添加到自定义视图的子视图中。
- 更新 2 -
附加信息:它符合NSMenuDelegate
协议。
objective-c - 保持另一个应用程序的窗口处于活动状态,同时仍从另一个应用程序的窗口接收鼠标事件?
有没有办法让我的应用程序的窗口接收键盘和/或鼠标事件(即用户单击窗口的按钮),同时仍将焦点保留在另一个不相关的应用程序上?
我尝试在不同级别配置我的窗口,包括 [myWindow setLevel:NSPopUpMenuWindowLevel] 无济于事。
cocoa - NSButton 鼠标按下事件
我试图在鼠标按下按钮时显示弹出菜单。该按钮应在鼠标按下时显示为按下,并且在鼠标按下时“未按下”,无论选择了任何菜单项。类似于用于添加应用程序的 Expose/Space Preference 面板“+”按钮。
到目前为止,我尝试了 3 种方法:
单击按钮时发送操作。但是这里弹出菜单出现在鼠标上而不是鼠标下
子类 NSButton 并覆盖 mouseDown:。弹出菜单出现在鼠标按下时,我可以选择任何菜单项。但是当弹出菜单消失时,按钮似乎被按下了。因此,我需要再次单击以“取消按下”按钮,然后才能再次获得相同的操作。
NSEvent addLocalMonitorForEventsMatchingMask。与 2 类似的行为。
有什么建议吗?我猜方法 2 或 3 是正确的方法,只需要“取消按下”鼠标上的按钮。
cocoa - NSEvent 修饰符标志在鼠标移动之前不会更新
在 Mac OS X 10.6 中,NSEvent
有一个+modifierFlags
类方法来确定当前按下的修饰符标志。在 10.5 中,[[NSApp currentEvent] modifierFlags]
仅在鼠标移动后使用更新。有什么方法可以异步获取修饰符标志吗?
objective-c - 在 NSMenu 打开时捕获按键事件
NSMenu
我有兴趣在 a打开时捕获按键。例如,如果菜单打开并且用户在键盘上按下“e”或“1”,则发送特定消息(最好传递包含对按下哪个键的引用的事件对象)。
我查看了备用菜单,但我的印象只能用于捕获选项键。
目前我没有使用任何自定义视图,只是NSStatusBar
(菜单产生的地方)和NSMenu
.
我是 Objective-C 的新手,所以如果我的措辞有误,我深表歉意。
真的很感谢帮助!