Обробники для звичайних вікон повідомлень, Microsoft Docs
За замовчуванням обробники для стандартних повідомлень 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.
За згодою імена цих обробників починаються з префіксу on. Деякі з цих обробників не приймають аргументів, тоді як інші приймають кілька. Деякі також мають тип, що повертається, відмінний від void>CWnd , імена яких починаються з on. Оголошення функцій-членів уCWnd мають префіксafx_msg.