我正在尝试实现一个Cocoa消息泵。我对Cocoa API没有多少经验,但我设法使用NSApp nextEventMatchingMask
实现了一个基本的泵。
这种方法的问题在于我没有得到所有的事件,而我所做的事情似乎只适用于主窗口,而不是窗口上的任何小部件。
我的UI是用代码生成的(没有笔尖),我没有使用Cocoa runLoop(因此需要消息泵)。我试图将所有Objective-C ++和Cocoa代码保持在最低限度。
需要循环遍历所有即将发生的事件,并根据对象和事件将它们分派到适当的函数来处理它们。
这是伪代码,用来表示我的意思(以及我所拥有的,主要是,除了它只做“主窗口”事件)
event = GetNextEvent();
while (event)
{
if(event->type == MOUSE_DOWN)
{ mouse_down(event->target); }
event = GetNextEvent();
}
OS X上有一些技巧吗?
答案 0 :(得分:3)
很抱歉,但正如评论中已提到的那样 -
尝试使用Cocoa模仿经典Mac OS 7 样式运行循环并不是一个好主意,因为AppKit中的所有内容(计时器,通知,事件,队列等)都依赖于在Cocoa应用程序的每个帖子中存在“正确的”NSRunLoop
。
您可以查看this page on CocoaDev或NSRunLoop docs以获取更深入的信息。
对于简约的Cocoa示例应用程序,请查看关于“ Cocoa With Love ”博客的精彩博文:
的 Minimalist Cocoa programming 强>