微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

wxWindowsPython 和 C++识别左右 mod 键

如何解决wxWindowsPython 和 C++识别左右 mod 键

我正在开发一个 wxPython 应用程序来为游戏编写键绑定,该游戏可以将 Left-Shift、-Ctrl 和 -Alt 与 Right-Shift 等分开绑定。

我可以使用 keyEvent.ShiftDown() 等来发现 shift 是否向下,但显然我需要在 keyEvent.GetRawKeyFlags() 内部翻找,如果我想要关于它是左还是右的信息。文档提供了一些帮助:

在 MSW 下,原始标志只是 lParam 参数的值 相应的消息。

在 GTK 下,原始标志包含硬件密钥代码字段 对应的 GDK 事件。

在 macOS 下,原始标志包含修饰符状态。

但是,我无法找到可能的“相应消息的 lParam 参数”值的不错列表等。我发现了一些不起作用的列表;我认为它们可能是特定于 C# 的和/或过时的。

我认为我的下一步是遍历 wxWidgets C++ 代码本身,看看我是否能理解它,或者只是反复试验 32 位的标志,但我想我会看看你们都有这方面的经验,可以为我指明正确的方向。

(在我的代码中,下面,我知道我的 modKeyFlags 值不是远程二进制标志形状的;这部分正在从“==”过渡到“&”,但我从未找到完成工作的标志列表。我希望你能看到它的目标。)

if wx.Platform == '__WxmsW__':    
    modKeyFlags = {    
        'LSHIFT': 160,'RSHIFT': 161,'LCTRL' : 162,'RCTRL' : 163,'LAlT'  : 164,'RALT'  : 165,}    
elif wx.Platform == '__WXX11_':    
    modKeyFlags = {    
        'LSHIFT': 65505,'RSHIFT': 65506,'LCTRL' : 65507,'RCTRL' : 65508,'LALT'  : 65513,'RALT'  : 65514    
    }    
elif wx.Platform == '__WXMAC__':    
    pass    

# ... more stuff,then inside event handler:

        # check for each modifier key
        if (event.ShiftDown()) :
            if SeparateLR and modKeyFlags:
                if isinstance(event,wx.KeyEvent):
                    rawFlags = event.GetRawKeyFlags()
                    if   (rawFlags & modKeyFlags['LSHIFT']): self.ShiftText = "LSHIFT+"
                    elif (rawFlags & modKeyFlags['RSHIFT']): self.ShiftText = "RSHIFT+"
            else:
                self.ShiftText = "SHIFT+"

# ... checks for CTRL and ALT

关于在哪里可以找到 WxmsW、WXX11 和 WXMAC 中任何一个的关键事件的原始关键标志的正确列表的任何信息都将非常有帮助。谢谢!

解决方法

使用 wxpython 演示的“键盘事件”页面,我可以看到事件得到的 RawFlags 的十进制表示。取这些十进制数,从较大的数中减去较小的数,然后将差值转换为二进制,我得到,例如,0b11000000000000000000,现在我只需要反复试验这两个标志。

代表问题作者添加。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。