Метод PreTranslateMessage класса CMultiView
Кроме добавления новой макрокоманды к таблице сообщений класса CMultiView и соответствующего метода-обработчика OnContextMenu, компонент Pop-up Menu добавляет метод PreTranslateMessage к классу CMultiView.
В него записывается программный код, который обнаруживает нажатие комбинации клавиш <Shift+F10> или специальной клавиши на клавиатуре с дополнительными клавишами Windows 95 и напрямую вызывает метод OnContextMenu:
//////////////////////////////////////////////////////////////
// Метод PreTranslateMessage класса CMultiView
BOOL CMultiView::PreTranslateMessage(MSG* pMsg)
{
// CG: Следующий блок добавлен компонентом Pop-up Menu
{
// Если нажата комбинация клавиш <Shift+F10>
if((((pMsg->message == WM_KEYDOWN
pMsg->message == WM_SYSKEYDOWN) &&
(pMsg->wParam == VK_F10) &&
(GetKeyState(VK_SHIFT) & ~1)) != 0)
// it's Shift+F10 OR Natural keyboard key
(pMsg->message == WM_CONTEXTMENU))
{
// Определяем экранные координаты клиентской части окна
CRect rect;
GetClientRect(rect);
ClientToScreen(rect);
// Записываем в объект point класса CPoint координаты
// левого верхнего угла клиентской части окна, добавляя
// к нему смещения в 5 пикселов по горизонтали и вертикали
CPoint point = rect.TopLeft();
point.Offset(5, 5);
// Отображаем контекстное меню в позиции point
OnContextMenu(NULL, point);
// Возвращаем значение TRUE, так как сообщение обработано
return TRUE;
}
}
// Вызываем метод PreTranslateMessage базового класса CView
return CView::PreTranslateMessage(pMsg);
}