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