Cocoa,Mac OS X 10.6。
我的应用程序(游戏)需要反复确定鼠标是否在视图中停止,即使鼠标位置没有改变。
问题:
mouseDown
。如果此时鼠标未移动,则不会调用mouseDragged
,也不会再生成mouseDown
个事件。问题:在初始(仅限)mouseDown
事件后,如何确定鼠标仍然处于停机状态?
感谢。
答案 0 :(得分:0)
如果您需要在鼠标停止时定期执行某些操作,请mouseDown:
创建重复timer,然后mouseUp:
将其删除。
答案 1 :(得分:0)
如果您只是想知道鼠标是否已关闭,请在BOOL
和mouseDown:
中设置mouseUp:
变量。
如果您想在鼠标停止时继续做某事,可以按照此处的说明进入鼠标跟踪循环:The Mouse-Tracking Loop Approach基本上你循环直到找到鼠标按下事件,你可以做任何你想做的事情在循环。您必须使用nextEventMatchingMask:untilDate:inMode:dequeue:
代替nextEventMatchingMask:
,并将untilDate
设置为简短。
答案 2 :(得分:0)
CGEventSourceButtonState(kCGEventSourceStateCombinedSessionState,kCGMouseButtonLeft));
就是你在64位上所追求的。 (确定晚了4年)。
// mozzilla ......
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