1

这是 plt-scheme 包装库的一部分:

(define InputMask

  (_bitmask '(NoEventMask =            #x00000000

            KeyPressMask =             #x00000001

            KeyReleaseMask =           #x00000002

            ...

            OwnerGrabButtonMask =      #x01000000)

      _long))

问题是我无法弄清楚如何访问位掩码(或枚举)中的字段。例如,如何获取 KeyPressMask 值?

4

1 回答 1

4

你没有。添加 ctypes 很容易:要创建一个新的 ctype,您需要提供一个现有的 ctype 来构建,以及两个函数 - 一个将任何内容转换为现有类型,一个以另一种方式转换。

现在,_bitmask类型就是这样做的——它建立在_int(但在你的情况下,它是 on _long),并且两个翻译函数将符号列表转换为整数,将整数转换为符号列表。一旦使用了这样的类型,您就不需要知道 的值KeyPressMask——您只知道可以'(KeyPressMask)作为InputMask输入传递给外部函数,然后将其转换为适当的数字;而且您还知道,当您从具有InputMask输出的函数中获取结果值时,它将是可能包含的符号列表KeyPressMask。底线是在方案方面你不处理数字——只处理符号列表。

如果您确实需要出于某种模糊的原因访问这些值,那么您可以通过其他方式构建自己的 ctype —— 使用make-ctype(如我上面概述的)应该非常容易。

于 2009-12-14T18:27:01.943 回答