Microsoft Visual C++ и MFC. Программирование для Win95 и WinNT

       

Метод 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);

}



Содержание раздела