可可消息泵?

时间:2013-04-18 04:53:07

标签: c++ macos cocoa objective-c++

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

1 个答案:

答案 0 :(得分:3)

很抱歉,但正如评论中已提到的那样 -

尝试使用Cocoa模仿经典Mac OS 7 样式运行循环并不是一个好主意,因为AppKit中的所有内容(计时器,通知,事件,队列等)都依赖于在Cocoa应用程序的每个帖子中存在“正确的”NSRunLoop

您可以查看this page on CocoaDevNSRunLoop docs以获取更深入的信息。

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