Как использовать F10 в качестве ярлыка в приложении MFC с использованием ленты

Я разработал приложение MFC, используя VS2008 и пакет функций MFC. Пользовательский интерфейс этого приложения использует ленту.

Теперь мне нужно иметь F10 в качестве правильного ярлыка для одной из важнейших функций моего приложения, но мне кажется, что я не могу правильно установить ускоритель, поскольку он всегда использует ленточный ускоритель по умолчанию над моим.

Есть идеи как этого добиться?

3 ответа

Возникла та же проблема и была решена путем добавления метода: virtual BOOL PreTranslateMessage (MSG * pMsg);

BOOL CMyView::PreTranslateMessage(MSG* pMsg)
{
    if ((pMsg->message == WM_SYSKEYDOWN) && (pMsg->wParam == VK_F10))
    {
        OnMyAction(); //code on F10
        return TRUE;
    }
    return CView::PreTranslateMessage(pMsg);
}

Вы пытались добавить обработчик для WM_SYSKEYDOWN и проверить код сообщения для значения wParam VK_F10? F10 требует особой обработки, так как это старая альтернатива для нажатия клавиши Alt, чтобы открыть строку меню под управлением клавиатуры.

Я полагаю, вы уже пытались зарегистрировать горячую клавишу. Канонический способ получить нажатие клавиши - использовать SetWindowsHookEx, для основного потока вашего приложения. Глобальные оконные хуки загружены, и ограничения безопасности при перехвате в Vista/Win7/Server 2008 сделали их в любом случае намного менее полезными. Но хук, специфичный для процесса, подойдет - и не обязательно должен быть в DLL.

Другие вопросы по тегам