Обработчики для обычных окон сообщений
По умолчанию обработчики для стандартных сообщений 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.