我正在尝试实现一个 Cocoa 消息泵。我对 Cocoa API 没有太多经验,但我设法使用NSApp nextEventMatchingMask
.
这种方法的问题是我没有得到所有的事件,而且我所做的似乎只适用于主窗口,而不是窗口上的任何小部件。
我的 UI 是在代码中生成的(没有 nib),我没有使用 Cocoa runLoop(因此需要消息泵)。我试图将所有 Objective-C++ 和 Cocoa 代码保持在最低限度。
需要循环所有传入的事件并将它们分派到适当的函数以根据对象和事件处理它们。
这是显示我的意思的伪代码(以及我所拥有的,主要是,除了它只执行“主窗口”事件)
event = GetNextEvent();
while (event)
{
if(event->type == MOUSE_DOWN)
{ mouse_down(event->target); }
event = GetNextEvent();
}
在 OS X 上有一些技巧吗?