Шаг 311 - PreTranslateMessage в MFC (CWinApp)

Куда попадают все сообщения ввода в программе на MFC? В класс CWinApp. Именно в нем в функции Run( ) есть обработка ввода.

Запускается петля обработки сообщений с помощью функций TranslateMessage() и DispatchMessage(). Так же во время простоя CWinApp вызывает функцию OnIdle(). Но перед тем как вызвать TranslateMessage() класс CWinApp вызывает PreTranslateMessage() для того, чтобы Вы сами могли добавить код. Общая схема обработки в MFC такая:

311.gif (4449 b)

Функция PreTranslateMessage() виртуальная, то есть ее можно перегрузить:

virtual BOOL PreTranslateMessage
( 
	MSG* pMsg //Указатель на структуру сообщения
);

Вот так например, вызвав Add Virtual Function:

////////////////////////////////////////
// CT2App message handlers

BOOL CT2App::PreTranslateMessage(MSG* pMsg) 
{
	return CWinApp::PreTranslateMessage(pMsg);
}

Если вы не хотите обрабатывать сообщение дальше, то просто верните ненулевое значение, а если дальнейшая обработка стандартными средствами нужна, то верните 0. Используя ее вы спокойно можете отгородить свое приложение от целого класса сообщений.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем.