C OS X Quartz事件和某些事件标志的使用

C OS X Quartz事件和某些事件标志的使用,c,macos,cocoa,keyboard-events,macos-carbon,C,Macos,Cocoa,Keyboard Events,Macos Carbon,我正在实现一个虚拟键盘,它使用修改器标志来启用带有这些修改键的输入键事件,如:cmd、alt/opt、shift 我想知道两件事: kcGEventflagmasknocalesed和kCGEventFlagMaskNumericPad的目的是什么,我可以将它们映射到kVK.*键代码中定义的任何键吗 kCGEventFlagMaskAlphaShift,kCGEventFlagMaskAlphaShift之间有什么区别,以及它们如何对应于kVK\u Shift,kVK\u RightShift

我正在实现一个虚拟键盘,它使用修改器标志来启用带有这些修改键的输入键事件,如:cmd、alt/opt、shift

我想知道两件事:

  • kcGEventflagmasknocalesed
    kCGEventFlagMaskNumericPad
    的目的是什么,我可以将它们映射到
    kVK.*
    键代码中定义的任何键吗
  • kCGEventFlagMaskAlphaShift
    kCGEventFlagMaskAlphaShift
    之间有什么区别,以及它们如何对应于
    kVK\u Shift
    kVK\u RightShift
  • kCGEventFlagMaskSecondaryFn
    是否对应于
    kVK_函数
  • 我已经完成了修改器键到修改器标志的映射功能,如下所示:

    static uint64_t mod_key_code_to_mod_flag(uint16_t mod_key_code) {
    
        switch(mod_key_code) {
            case kVK_Shift:
                return kCGEventFlagMaskAlphaShift;
            case kVK_RightShift:
                return kCGEventFlagMaskShift;
            case kVK_Control:
                return kCGEventFlagMaskControl;
            case kVK_Option:
            case kVK_RightOption:
                return kCGEventFlagMaskAlternate;
            case kVK_Command:
                return kCGEventFlagMaskCommand;
            case kVK_Help:
                return kCGEventFlagMaskHelp;
            case kVK_Function:
                return kCGEventFlagMaskSecondaryFn;
            default:
                return 0; 
        }
    }
    

    它是否完整?

    目前无法轻松搜索到《KCGEventflagmasknocalesed》的目的。由于本网站的一点是归档答案所需的信息,因此以下是早期文档中关于鼠标在可可粉(碳)中聚合的定义:

    如果启用鼠标合并,中间[sic]鼠标移动事件将合并到最近的事件中,以便在任何时候事件队列中都只有一个鼠标移动或鼠标拖动事件。例如,当用户在屏幕上移动鼠标时,会生成比大多数应用程序所关心的更多的鼠标移动事件。Carbon事件管理器首先检查鼠标移动事件是否已经存在,而不是将所有这些事件放在队列中(这可能会降低应用程序的速度)。如果有,则使用最近生成的事件中的位置和增量信息更新该事件


    由于某些原因,当前文档省略了此定义(可能不再支持
    mouseCalescingenabled
    属性,即使它在文档中)。它是为鼠标事件的消费者设计的。如果您的虚拟键盘未生成鼠标事件,则此修饰符在很大程度上可以忽略。

    此时无法轻松搜索
    kckeventflagmasknocalesed
    。由于本网站的一点是归档答案所需的信息,因此以下是早期文档中关于鼠标在可可粉(碳)中聚合的定义:

    如果启用鼠标合并,中间[sic]鼠标移动事件将合并到最近的事件中,以便在任何时候事件队列中都只有一个鼠标移动或鼠标拖动事件。例如,当用户在屏幕上移动鼠标时,会生成比大多数应用程序所关心的更多的鼠标移动事件。Carbon事件管理器首先检查鼠标移动事件是否已经存在,而不是将所有这些事件放在队列中(这可能会降低应用程序的速度)。如果有,则使用最近生成的事件中的位置和增量信息更新该事件


    由于某些原因,当前文档省略了此定义(可能不再支持
    mouseCalescingenabled
    属性,即使它在文档中)。它是为鼠标事件的消费者设计的。如果您的虚拟键盘没有生成鼠标事件,则此修改器基本上可以忽略。

    Q2。在几秒钟内,谷歌快速搜索关键词(最上面的列表)回答了第一部分。也可以用谷歌搜索其他人。@WeatherVane-你可以分享你的发现吗?@Noitidart好的,用我的浏览器你可以选择一个单词或短语,然后用关联菜单“搜索谷歌”。这不是一个“让我为你谷歌一下”的网站。正如你所知,OP应该已经做到了这一点。在几秒钟内,谷歌快速搜索关键词(最上面的列表)回答了第一部分。也可以用谷歌搜索其他人。@WeatherVane-你可以分享你的发现吗?@Noitidart好的,用我的浏览器你可以选择一个单词或短语,然后用关联菜单“搜索谷歌”。这不是一个“让我为你谷歌一下”的网站。正如你所知,OP应该已经做到了这一点。