2013-07-07 3 views
0

Я получаю предупреждение, что PostEvent устарел, и я предполагаю, что предполагается использовать PostEventToQueue, но он принимает два дополнительных параметра, и я не могу найти документацию о том, какая комбинация параметров (одна спецификация очереди, другая - приоритет события) будет эквивалентна PostEvent.Какая правильная замена для PostEvent

+1

Пожалуйста, используйте только тег xcode для проблем, связанных с самим XCode, а не проблемы программирования, связанные с языком/ОС, для которых вы разрабатываете. Я удалил его и добавил для вас тег какао. – lnafziger

+0

@Inafziger, я не вижу причин, по которым также имеет значение тег Cocoa. – JWWalker

+0

Это часть API Cocoa, поэтому она не является необоснованной, возможно, даже более разумной, чем «osx». – David

ответ

1

PostEventToQueue предназначено для использования в условиях углеродного события, а не для низкоуровневого события ОС, такого как PostEvent. Если вы хотите опубликовать событие с клавиатурой или мышью, вы должны использовать CGEventPost.

Редактировать добавить: Для того, чтобы оставить курсор вниз на текущем месте, я думаю (не тестировалось), что вы можете сделать это:

CGEventRef theEvent = CGEventCreate(NULL); 
CGEventSetType(theEvent, kCGEventLeftMouseDown); 
CGEventPost(theEvent); 
CFRelease(theEvent); 
+0

Итак, каков эквивалентный вызов CGEventPost для устаревшего вызова в коде JUCE, с которым я экспериментирую. Вызов - PostEvent (:: mouseDown, 0); – David

+0

Спасибо, я попробую ваше предложение. Жаль, что нужно заменить один звонок четырьмя звонками! – David

+0

Каков ваш источник для утверждения, что 'PostEventToQueue' устарел? В заголовке и в документе диспетчера событий Carbon не упоминается устаревание. –

0

Я думаю, было бы разумно предположить, что использование очереди событий возвращается GetMainEventQueue() (или GetCurrentEventQueue, если вы в главной теме), и kEventPriorityStandard для приоритета, получите результаты, эквивалентные PostEvent.

Помните, что это влияет только на ваше собственное приложение. Даже старый диспетчер событий, вероятно, больше не имеет доступа к «очереди событий операционной системы» - я не удивлюсь, если это всего лишь обертка вокруг версии Carbon Event Manager. Вам нужно переключиться на материал CGEvent, если вы хотите публиковать события, которые могут поразить другие приложения.

Смежные вопросы