Macos 实现自定义Cocoa事件跟踪循环
我正在开发一个定制的跨平台UI库,它需要一个同步的“ShowPopup”方法来显示一个弹出窗口,运行一个事件循环直到它完成,并在单击弹出窗口外或按escape时自动取消。键盘、鼠标和滚轮事件需要发送到弹出窗口,但其他事件(绘制、绘制、计时器等)需要在循环运行时发送到其常规目标 编辑:为了澄清,我所说的弹出窗口是指这种菜单式的弹出窗口,而不是警报/对话框等 在Windows上,我通过调用GetMessage/DispatchMessage并根据需要过滤和分派消息来实现这一点。很好 然而,我对Cocoa/OSX的经验要少得多,并且发现整个事件循环/调度范式有点混乱。我看过下面的文章,它解释了如何实现一个鼠标跟踪循环,这与我所需要的非常相似: 但是。。。关于这件事我有些担心Macos 实现自定义Cocoa事件跟踪循环,macos,cocoa,Macos,Cocoa,我正在开发一个定制的跨平台UI库,它需要一个同步的“ShowPopup”方法来显示一个弹出窗口,运行一个事件循环直到它完成,并在单击弹出窗口外或按escape时自动取消。键盘、鼠标和滚轮事件需要发送到弹出窗口,但其他事件(绘制、绘制、计时器等)需要在循环运行时发送到其常规目标 编辑:为了澄清,我所说的弹出窗口是指这种菜单式的弹出窗口,而不是警报/对话框等 在Windows上,我通过调用GetMessage/DispatchMessage并根据需要过滤和分派消息来实现这一点。很好 然而,我对Co
peek消息(…,PM\u REMOVE)
,peek消息(…,PM\u NOREMOVE)
和DispatchMessage()
的等价物是什么
非常感谢您的帮助。当您使用这个术语时,“弹出窗口”到底是什么?这个术语在不同的GUI API中有不同的含义。它只是一个模态对话框窗口吗
问题编辑更新: 看起来您只是想实现一个自定义菜单。苹果公司提供了一个示例项目,说明了这项技术。这是WWDC 2010年会议视频之一的伴奏
根据具体需要,您可能希望使用
NSAlert
。或者,您可以使用自定义窗口,只需使用NSApplication
的-runModalForWindow:
方法以模式运行它
为了满足用户在窗口外单击时结束模式会话的要求,可以使用本地事件监视器。《Cocoa事件处理指南》(modern,current)中甚至有这样一个功能示例:
综上所述,以下是(希望不再相关)您具体问题的答案:
nsmodalpanelrunlopmode
nexteventmachingmask:untilDate:inMode:dequeue:
的“dequeue:”参数?如果您为此传递了NO
,则事件将留在队列中
select()
、poll()
、epoll()
或kevent()
处理多个异步通信通道?有点像,但自动化程度更高。您不仅构建了一个数据结构,其中列出了要监视的输入源以及您感兴趣的输入源上的特定事件,而且每个输入源都有一个与之关联的回调。运行run循环就像cal