15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Перехват клавиш Esc и Enter во время редактирования

Метод основывается на перегрузке виртуальной функции PreTranslateMessage(). Прием дает возможность обрабатывать некоторые важные сообщения и комбинации клавиш. Он позволяет осуществлять копирование, резку, вставку, используя стандартные клавиши и не пропуская некоторые сообщения непосредственно к элементу управления.


BOOL CTreeCtrlX::PreTranslateMessage(MSG* pMsg) 
{
 if( pMsg->message == WM_KEYDOWN )
 {
  // Если находимся в режиме редактирования, надо быть увереным,
  // что окно редактирования получает дейтсвительно важные клавиши
  if( GetEditControl()&&  (pMsg->wParam == VK_RETURN 
    || pMsg->wParam == VK_DELETE
    || pMsg->wParam == VK_ESCAPE
    || GetKeyState( VK_CONTROL)
   )  )
   {
    ::TranslateMessage(pMsg);
    ::DispatchMessage(pMsg);
    return TRUE;
   }
  }
 return CTreeCtrl::PreTranslateMessage(pMsg);
}

 

Источник: ProtoSphere