Поделиться через


Обработчики для обычных окон сообщений

По умолчанию обработчики для стандартных сообщений windows ()WM_ определенного в классе CWnd.Библиотека классов, найденные имена для этих обработчиков имя сообщения.Например, обработчик сообщений WM_PAINT объявлен в CWnd how to:

afx_msg void OnPaint();

Ключевое слово afx_msg обеспечивает эффект ключевого слова C++ виртуальный, различать обработчики от других функций элементов CWnd.Обратите внимание, что эти функции не является виртуальным; вместо этого они реализуются посредством сопоставления сообщения.Сопоставления сообщения зависят исключительно на стандартных макросах препроцессора, не для всех расширений языка C++.Ключевое слово afx_msg позволяет в пробелы после предварительной обработки.

Для переопределения обработчика, определенный в базовом классе, просто задать функцию с тем же прототипом в производном классе, и внести запись сообщение-сопоставления обработчика.Обработчик «переопределение» любой обработчик с тем же именем в любом из базовых классов типа.

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

Предупреждающее замечаниеВнимание

Не безопасное изменить аргументы, переданные в обработчик, если планируется передать их в обработчик базового класса.Например, может быть уговорены для изменения аргумента nChar обработчика OnChar (прописными буквами, например преобразование).Эта функциональности довольно неясна, но если необходимо запустить этот эффект, использующий функции-члена SendMessageCWnd.

Как указать правильный способ переопределения заданного сообщения?, Если окно свойств записывает основу функции обработчика для заданного обработчика сообщений — OnCreate для WM_CREATE, например — это эскиз в форме рекомендованного переопределенного функции-члена.В следующем примере рекомендует вызов обработчика сначала обработчик базового класса и переход только при условии, что он не возвращает – 1.

int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
   if (CFormView::OnCreate(lpCreateStruct) == -1)
      return -1;

   // TODO:  Add your specialized creation code here

   return 0;
}

По соглашению имена этих обработчиков начинаются с префикса «on». Некоторые из этих обработчиков не принимают аргументов, тогда как другие принимают несколько.Некоторые также имеют возвращаемый тип, отличный от void.По умолчанию обработчики для всех сообщений WM_ описаны в справочнике по MFC, как функции-члены класса CWnd, имена которых начинаются с «on». Объявление функций-членов в CWnd имеют префикс afx_msg.

См. также

Основные понятия

Объявление функции обработчика сообщений