Cocoa-如何在鼠标未按下时获取鼠标按下事件';不要拖拉?
Cocoa,MacOSX10.6 我的应用程序(游戏)需要反复确定鼠标是否在视图中向下,即使鼠标位置没有改变 问题是:Cocoa-如何在鼠标未按下时获取鼠标按下事件';不要拖拉?,cocoa,event-handling,mouse,Cocoa,Event Handling,Mouse,Cocoa,MacOSX10.6 我的应用程序(游戏)需要反复确定鼠标是否在视图中向下,即使鼠标位置没有改变 问题是: mouseDown仅在第一次按住鼠标时调用。如果此时未移动鼠标,则不会调用mouseDragged,并且不再生成mouseDown事件 问题:如何确定鼠标在初始(且仅)mouseDown事件后仍处于按下状态 谢谢。如果你需要在鼠标按下时定期做一些事情,让mouseDown:创建一个重复,让mouseUp:将其拆下。如果你只想知道鼠标是否按下,请在mouseDown:和mou
仅在第一次按住鼠标时调用。如果此时未移动鼠标,则不会调用mouseDown
,并且不再生成mouseDragged
事件mouseDown
mouseDown
事件后仍处于按下状态
谢谢。如果你需要在鼠标按下时定期做一些事情,让
mouseDown:
创建一个重复,让mouseUp:
将其拆下。如果你只想知道鼠标是否按下,请在mouseDown:
和mouseUp:
中设置一个BOOL
变量
如果你想在鼠标按下时继续做一些事情,你可以进入一个鼠标跟踪循环,如下所述:基本上,你可以循环直到找到鼠标上升事件,你可以在循环中做任何你想做的事情。您必须使用nexteventmachingmask:untilDate:inMode:dequeue:
而不是nexteventmachingmask:
,并将untilDate
设置为较短的值。 1.30 #ifdef XP_MACOSX
1.31 - // hacky OS call to ensure that we don't show a context menu when the user
1.32 - // let go of the mouse already, after a long, cpu-hogging operation prevented
1.33 + // Hack to ensure that we don't show a context menu when the user
1.34 + // let go of the mouse after a long cpu-hogging operation prevented
1.35 // us from handling any OS events. See bug 117589.
1.36 - if (!::StillDown())
1.37 + if (!CGEventSourceButtonState(kCGEventSourceStateCombinedSessionState, kCGMouseButtonLeft))
1.38 return;
1.39 #endif
谢谢你,汤姆。因为这是一个游戏,我需要异步解释这些游戏。也就是说,随着时间的推移,我需要获得事件,然后将它们传递给游戏逻辑。(因此,我无法保持紧密联系。)谢谢彼得。它似乎有点笨拙——本应该更喜欢系统级的方法——但会尝试这种方法。对我来说,这似乎是可可团队的一个奇怪的疏忽,因为这有点把人们推向了一种不太好的投票方式。先生,计时员不是投票人。