Alt + Access键无法在CMFCMenuBar上使用非英语语言

时间:2014-03-08 16:23:42

标签: mfc keyboard-shortcuts menubar

我正在使用CMFCMenuBar类来显示我的主框架菜单,当用户按下Alt + F时菜单包含“& File”等访问键它将打开文件菜单,但这对我不起作用在访问键下方显示一行,按下Alt后,主菜单中的第一个菜单项突出显示,我可以使用箭头键(向上,向下,向右,向左)进行导航,但不能使用访问键进行导航

enter image description here

正如我们所看到的那样,菜单项在访问键下面有一行,但它无法跟踪它?

1 个答案:

答案 0 :(得分:0)

在我进行了一些搜索之后,我找到了关键的处理

我达到了这个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,我收到了错误报告http://connect.microsoft.com/VisualStudio/feedback/details/525656/hot-key-is-not-working-on-russian-language-for-applications-which-uses-mfc-feature-pack

解决方案


我们需要在应用程序启动时添加以下内容,我将其放入方法 CMainFrame :: OnCreate

CMFCToolBar::m_bExtCharTranslation = TRUE;//it is FALSE by default