Какао - Как получить Mouse Down Events, когда мышь не перетаскивает? - PullRequest
1 голос
/ 05 июля 2010

Какао, Mac OS X 10.6.

Мое приложение (игра) должно повторно определять, находится ли мышь в пределах вида, даже если положение мыши не меняется.

Проблема:

  • mouseDown будет вызываться только при первом нажатии и удерживании мыши. Если мышь не перемещена в этот момент, mouseDragged не вызывается и больше не генерируется mouseDown событий.

Вопрос: как определить, что мышь все еще не работает после этого начального (и единственного) mouseDown события?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 05 июля 2010

Если вы просто хотите узнать, нажата ли мышь или нет, установите переменную BOOL в mouseDown: и mouseUp:.

Если вы хотите что-то делать, пока мышь не работаетВы можете ввести цикл отслеживания мыши, как описано здесь: Подход цикла отслеживания мыши По сути, вы выполняете цикл до тех пор, пока не найдете событие увеличения мыши, и вы можете делать все, что захотите в цикле.Вам придется использовать nextEventMatchingMask:untilDate:inMode:dequeue: вместо nextEventMatchingMask: и установить для untilDate что-то короткое.

0 голосов
/ 25 июля 2014

CGEventSourceButtonState (kCGEventSourceStateCombinedSessionState, kCGMouseButtonLeft));

- это то, что вам нужно на 64 бит. (хорошо, 4 года позже).

// Моззилла ...

     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
0 голосов
/ 05 июля 2010

Если вам нужно что-то делать периодически, когда мышь не работает, mouseDown: создайте повторяющийся таймер и mouseUp: разрушите его.

...