Как использовать 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.