【发布时间】:2009-06-01 00:39:58
【问题描述】:
Mac OS 中是否有与SendMessage 等效的功能?
【问题讨论】:
-
如果您能就您需要 SendMessage 的原因或您想要实现的目标提供更多解释,这将有所帮助。这个问题太模糊了。
标签: c++ objective-c windows macos
Mac OS 中是否有与SendMessage 等效的功能?
【问题讨论】:
标签: c++ objective-c windows macos
具有讽刺意味的是,Objective-C 中的每个方法调用都相当于 SendMessage。 Objective-C 本质上是一个消息传递系统。
所以你就说:
[window myMessage]
myMessage 例程将通过将 myMessage 传递给 Window 对象并让它处理该方法来执行...
也可能更接近您真正想做的事情是使用通知在组件之间发送消息。
如果您在编译时没有 Window 对象,编译器可能会抱怨它不知道 Window 是否可以处理您发送的消息。对于这些情况,您可以使用:
[window performSelector:@selector(myMessage)]
此调用的其他版本允许将对象作为参数传递。
【讨论】:
这取决于您使用 SendMessage() 发送的消息。例如,Cocoa 中的大多数事件都通过-[NSApplication sendEvent:],或者如果您想要较低级别的版本,则通过SendEventToEventTarget()。对于其他消息,例如调整大小、移动等,您需要查看 NSWindow(例如-setFrame:animated:)或 NSApplication 的适当方法。
一般来说,不像 SendMessage() 那样使用漏斗例程和函数常量,在 Cocoa 中,您只需获取相关对象并调用其方法即可。
【讨论】:
在更高层次上,如果您谈论的是 Carbon 事件管理器,您将使用函数“SendEventToEventTarget”
【讨论】: