首页 > 解决方案 > 如何在任何语言布局中将 GTK 键盘事件键转换为英语?

问题描述

我想在我的 GTK-3 应用程序中使用键盘快捷键(如 Ctrl+Z/Ctrl+C/Ctrl/V 等)。对于不同的键盘布局,我得到不同的键盘事件。例如,我的键盘有英文和俄文布局,所以我的俄文键“Я”位于“Z”。世界上有很多种语言。如何使应用程序适用于任何语言?

现在我以这种方式仅翻译 russin 键盘的键码:

func main_event_listener(event *gdk.Event){
    eventObject := &gdk.EventKey{event}
    key := eventObject.KeyVal()
    state := eventObject.State()
    key, state = GTK_TranslateKeyLayoutEnglish(key, state)
    if state == gdk.GDK_CONTROL_MASK {
        if key == gdk.KEY_z {
            //Ctrl+Z
        } 
        if key == gdk.KEY_c {
            //Ctrl+C
        }
        if key == gdk.KEY_v {
            //Ctrl+V
        }
    } else {
        if key == gdk.KEY_F5 {
            //F5
        }
        if key == gdk.KEY_Delete {
            //Delete
        }
    }
}

func GTK_TranslateKeyLayoutEnglish(key uint, state uint) (uint, uint) {
    key2 := key
    state2 := state
    if state2 > 8192 { //RUSSIAN Ctrl 8196 == English Ctrl 4
        state2 -= 8192
    }
    switch key {
    case gdk.KEY_Cyrillic_ya: //RUSSIAN 'я'
        key2 = gdk.KEY_z
    case gdk.KEY_Cyrillic_ef: //RUSSIAN 'ф'
        key2 = gdk.KEY_a
    case gdk.KEY_Cyrillic_che: //RUSSIAN 'ч'
        key2 = gdk.KEY_x
    case gdk.KEY_Cyrillic_es: //RUSSIAN 'с'
        key2 = gdk.KEY_c
    case gdk.KEY_Cyrillic_em: //RUSSIAN 'м'
        key2 = gdk.KEY_v
        //etc
    }
    return key2, state2
}

我期望更好地实现 GTK_TranslateKeyLayoutEnglish() 函数

标签: gtkgtk3keyboard-eventskeyboard-layout

解决方案


推荐阅读