Есть ли функция, эквивалентная SendMessage в Mac OS?
Что эквивалентно (если есть) C ++ / Windows SendMessage () на Mac?
3 ответов
Как ни странно, каждый вызов метода в Objective-C эквивалентен SendMessage. Objective-C - это система передачи сообщений.
Итак, вы просто говорите:
[window myMessage]
и подпрограмма myMessage будет выполнена путем передачи myMessage объекту Window и обработки этого метода ...
Также возможно, что более близким к тому, что вы действительно хотите сделать, будет использование уведомлений для обмена сообщениями между компонентами.
Если во время компиляции у вас нет объекта Window, компилятор может пожаловаться, что не знает, может ли Window обработать отправляемое вами сообщение. В этих случаях вы можете использовать:
[window performSelector:@selector(myMessage)]
Существуют альтернативные версии этого вызова, которые позволяют передавать объекты в качестве параметров.
На более высоком уровне, если вы говорите о Carbon Event Manager, вы должны использовать функцию SendEventToEventTarget
Это зависит от того, какое сообщение вы отправляете с помощью SendMessage (). Большинство событий в Какао проходят, например, через -[NSApplication sendEvent:]
или SendEventToEventTarget()
, если вам нужна версия более низкого уровня. Для других сообщений, таких как изменение размера, перемещение и т. Д., Вам нужно будет посмотреть соответствующие методы NSWindow (например, -setFrame:animated:
) или NSApplication.
Вообще говоря, вместо использования процедуры воронки и констант функций, как это делает SendMessage (), в Какао вы просто получаете соответствующий объект и вызываете его методы.
Было бы полезно, если бы вы могли подробнее объяснить, зачем вам нужен SendMessage или чего вы пытаетесь достичь. Этот вопрос слишком расплывчатый.
– chrish01 июня 2009, 00:57