Alt+;非英语语言的访问密钥在CMFCMenuBar上不起作用

Alt+;非英语语言的访问密钥在CMFCMenuBar上不起作用,mfc,keyboard-shortcuts,menubar,Mfc,Keyboard Shortcuts,Menubar,我正在使用CMFCMenuBar类来显示我的主框架菜单,该菜单包含诸如“&File”之类的访问键,当用户按Alt+F时,它将打开文件菜单,但这对我不起作用。它在访问键下显示一行,按Alt后,主菜单中的第一个菜单项将高亮显示,我可以使用箭头键进行导航(上、下、右、左)但不是钥匙 正如我们所看到的,菜单项在访问键下有一行,但它不起作用。如何跟踪它?这是经过一些搜索后修复的,我跟踪了键的处理过程 我找到了这个MFC代码 BOOL CMFCToolBar::TranslateChar(UINT nCh

我正在使用CMFCMenuBar类来显示我的主框架菜单,该菜单包含诸如“&File”之类的访问键,当用户按Alt+F时,它将打开文件菜单,但这对我不起作用。它在访问键下显示一行,按Alt后,主菜单中的第一个菜单项将高亮显示,我可以使用箭头键进行导航(上、下、右、左)但不是钥匙


正如我们所看到的,菜单项在访问键下有一行,但它不起作用。如何跟踪它?

这是经过一些搜索后修复的,我跟踪了键的处理过程

我找到了这个MFC代码

BOOL CMFCToolBar::TranslateChar(UINT nChar)
{
    if (!CKeyboardManager::IsKeyPrintable(nChar))
    {
        return FALSE;
    }

    UINT nUpperChar = CKeyboardManager::TranslateCharToUpper(nChar);//this line guided me

    CMFCToolBarButton* pButton = NULL;
    if (!m_AccelKeys.Lookup(nUpperChar, pButton))
    {
        return FALSE;
    }

    ASSERT_VALID(pButton);

    // Save animation type and disable animation:
    CMFCPopupMenu::ANIMATION_TYPE animType = CMFCPopupMenu::GetAnimationType();
    CMFCPopupMenu::SetAnimationType(CMFCPopupMenu::NO_ANIMATION);

    BOOL bRes = DropDownMenu(pButton);

    // Restore animation:
    CMFCPopupMenu::SetAnimationType(animType);

    if (bRes)
    {
        return TRUE;
    }

    return ProcessCommand(pButton);
}
我跟踪了这行代码CKeyboardManager::TranslateCharToUpper(nChar); 首先是

UINT __stdcall CKeyboardManager::TranslateCharToUpper(const UINT nChar)
{
    if (nChar < VK_NUMPAD0 || nChar > VK_NUMPAD9 ||
        (::GetAsyncKeyState(VK_MENU) & 0x8000))
    {
        if (!CMFCToolBar::m_bExtCharTranslation)
        {
CMFCToolBar::m_bExtCharTranslation = TRUE;//it is FALSE by default