这是plt-scheme包装器库的一部分:
(define InputMask
(_bitmask '(NoEventMask = #x00000000
KeyPressMask = #x00000001
KeyReleaseMask = #x00000002
...
OwnerGrabButtonMask = #x01000000)
_long))
问题是我无法弄清楚如何访问位掩码中的字段(或者就此而言是枚举)。我怎样才能得到KeyPressMask值?
答案 0 :(得分:4)
你没有。添加ctypes很简单:要创建一个新的ctype,你需要提供一个现有的ctype来构建,还有两个函数 - 一个用于翻译现有类型,另一个用于翻译另一种方式。
现在,_bitmask
类型就是这样 - 它建立在_int
上(但在你的情况下,它在_long
上),两个翻译函数翻译一个符号列表到一个整数,一个整数到一个符号列表。一旦使用了这样的类型,您就不需要知道KeyPressMask
的值 - 您只知道可以将'(KeyPressMask)
作为InputMask
输入传递给外部函数,并且这将被翻译成适当的数字;并且您还知道,当您从具有InputMask
输出的函数中获取结果值时,它将是可能包含KeyPressMask
的符号列表。最重要的是,在方案方面,你不处理数字 - 只有符号列表。
如果做需要出于某些不明原因需要访问这些值,那么您可以通过其他方式构建自己的ctype - 使用make-ctype
(如上所述)应该是很容易。