Процедура Superclassing вікна

Superclassing є метод, який дозволяє програмі створення нового вікна з базової функціональності існуючого класу, а також додаткові можливості, які надаються застосування. Суперклас на основі існуючого класу вікна називається базового класу. Часто базовий клас є клас глобальної вікна системи таких як поля, але це може бути будь-який клас вікна.

Суперклас має свою власну процедуру вікно, називається суперкласу процедури. Суперкласу процедури можна виконати три дій після отримання повідомлення: він може передавати повідомлення до початкового вікна процедури, змінити повідомлення і передати його процедури вікна або обробити повідомлення і не передати його до початкового вікна процедури. Якщо процедура суперкласу обробляє повідомлення, це можна зробити перед, після цього, або обидва перед і після того, як вона проходить повідомлення до початкового вікна процедури.

На відміну від підкласу процедури суперкласу процедура може обробляти вікно Створення повідомлень (WM_NCCREATE, WM_CREATEі так далі), але він повинен також передати їх оригінальних процедура бази клас вікна так, щоб базовий клас вікна процедури можна виконати її процедури ініціалізації.

Суперкласу клас вікна програма спочатку дзвінків GetClassInfo функції для отримання інформації про базового класу. GetClassInfo заповнює WNDCLASS структури зі значеннями з WNDCLASS структуру базового класу. Далі, застосування копіює його власні дескриптор екземпляра в WNDCLASS структури, член hInstance і копіює ім'я суперкласу до членів lpszClassName . Якщо базовий клас має меню, застосунок має надати нове меню ж меню ідентифікатори і скопіюйте меню до lpszMenuName член. Якщо процедура суперкласу процесів WM_COMMAND повідомлення і не передати його до вікна процедури базового класу, у меню не обов'язково відповідні ідентифікатори. GetClassInfo не повертає lpszMenuName, lpszClassNameабо hInstance членом WNDCLASS структури.

Застосування повинні також встановити WNDCLASS структури, член lpfnWndProc . Функція GetClassInfo заповнює цей компонент з адресою оригінальні вікна процедури для класу. Застосування повинні зберегти цю адресу, щоб передати повідомлення процедури вікно і скопіювати адресу суперкласу процедуру у членів lpfnWndProc . Застосування у разі потреби змініть будь-які інші члени WNDCLASS структури. Після того, як вона заповнює WNDCLASS структури, застосування реєструє суперкласу передаючи адресу структура RegisterClass функції. Суперкласу потім може бути використаний для створення windows.

Оскільки superclassing реєструє новий клас вікна, заявку можна додати до додаткових клас байт і вікно додаткових байтів. Суперкласу не повинні використовувати вихідний додаткових байтів для базового класу або вікна з тих же причин, що екземпляр-підкласу або глобальний підкласу не повинні використовувати їх. Крім того, якщо програма додає додаткових байтів для його використання або клас, або зразок вікна, його потрібно посилання додаткових байтів по відношенню до додаткових байтів використовуються оригінальні базового класу. Оскільки кількість байтів, використовуваних за базовий клас може варіюватися від однієї версії базовий клас на наступний, початковий зсув для суперкласу власний додаткових байтів може також варіюватися від однієї версії базового класу до наступного.

Index