Что эквивалентно (если есть) C ++ / Windows SendMessage () на Mac?

Asked
Viewd1191

1

Есть ли функция, эквивалентная SendMessage в Mac OS?

  • Было бы полезно, если бы вы могли подробнее объяснить, зачем вам нужен SendMessage или чего вы пытаетесь достичь. Этот вопрос слишком расплывчатый.

    chrish01 июня 2009, 00:57

3 ответов

6

Как ни странно, каждый вызов метода в Objective-C эквивалентен SendMessage. Objective-C - это система передачи сообщений.

Итак, вы просто говорите:

 [window myMessage]
 

и подпрограмма myMessage будет выполнена путем передачи myMessage объекту Window и обработки этого метода ...

Также возможно, что более близким к тому, что вы действительно хотите сделать, будет использование уведомлений для обмена сообщениями между компонентами.

Если во время компиляции у вас нет объекта Window, компилятор может пожаловаться, что не знает, может ли Window обработать отправляемое вами сообщение. В этих случаях вы можете использовать:

 [window performSelector:@selector(myMessage)]
 

Существуют альтернативные версии этого вызова, которые позволяют передавать объекты в качестве параметров.

0

На более высоком уровне, если вы говорите о Carbon Event Manager, вы должны использовать функцию SendEventToEventTarget

См. http://developer.apple.com/. документация / Carbon / Reference / Carbon_Event_Manager_Ref / Reference / reference.html

1

Это зависит от того, какое сообщение вы отправляете с помощью SendMessage (). Большинство событий в Какао проходят, например, через -[NSApplication sendEvent:] или SendEventToEventTarget(), если вам нужна версия более низкого уровня. Для других сообщений, таких как изменение размера, перемещение и т. Д., Вам нужно будет посмотреть соответствующие методы NSWindow (например, -setFrame:animated:) или NSApplication.

Вообще говоря, вместо использования процедуры воронки и констант функций, как это делает SendMessage (), в Какао вы просто получаете соответствующий объект и вызываете его методы.