Mac上的C ++ / Windows SendMessage()的等价物(如果有的话)是什么?

时间:2009-06-01 00:39:59

标签: c++ objective-c windows macos

Mac OS中是否有与SendMessage相同的功能?

3 个答案:

答案 0 :(得分:6)

具有讽刺意味的是,Objective-C中的每个方法调用都相当于SendMessage。 Objective-C的核心是消息传递系统。

所以你只要说:

[window myMessage]

并通过将myMessage传递给Window对象并让它处理该方法来执行myMessage例程......

您可能更接近于您真正想做的事情是使用通知在组件之间发送消息。

如果在编译时没有Window对象,编译器可能会抱怨它不知道Window是否可以处理您发送的消息。对于这些情况,您可以使用:

[window performSelector:@selector(myMessage)]

此调用的备用版本允许将对象作为参数传递。

答案 1 :(得分:1)

这取决于您使用SendMessage()发送的消息。例如,Cocoa中的大多数事件都会通过-[NSApplication sendEvent:]SendEventToEventTarget(),如果您想要更低级别的版本。对于其他消息,例如调整大小,移动等,您需要查看NSWindow的适当方法(例如-setFrame:animated:)或NSApplication。

一般来说,不是像SendMessage()那样使用漏斗程序和函数常量,而是在Cocoa中只需掌握相关对象并调用其方法。

答案 2 :(得分:0)

在更高级别,如果您正在谈论Carbon Event Manager,您将使用“SendEventToEventTarget”函数

请参阅http://developer.apple.com/documentation/Carbon/Reference/Carbon_Event_Manager_Ref/Reference/reference.html