2

我正在尝试实现一个 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 上有一些技巧吗?

4

1 回答 1

3

对不起,但正如评论中已经提到的 -

尝试使用 Cocoa 模仿Classic Mac OS 7风格的运行循环并不是一个好主意,因为 AppKit 中的几乎所有内容(计时器、通知、事件、队列……)都依赖NSRunLoop每个线程中存在的“正确”一个可可应用程序。

您可以在 CocoaDev或NSRunLoop 文档上查看此页面以获取更深入的信息。

对于简约的 Cocoa 示例应用程序,请查看“ Cocoa With Love ”博客上的这篇精彩博文:
Minimalist Cocoa programming

于 2013-04-18T05:19:26.177 回答