Когда прикладная программа создает окно, операционная система назначает блок памяти для сохранения информации, характерной для окна, включая адрес оконной процедуры, которая обрабатывает сообщения для окна. Когда система должна передать сообщение окну, она ищет характерную для окна информацию для адреса оконной процедуры и передает сообщение этой процедуре.
Деление на подклассы
(subclassing) - методика, которая позволяет прикладной программе перехватывать и обрабатывать сообщения, вставленные в очередь или отправленные конкретному окну прежде, чем окно получит возможность обработать их. Деля на подклассы окна, приложение может дополнять, изменять или контролировать поведение окна. Хотя это и не рекомендуется, прикладная программа может делить на подклассы любые окна, включая и принадлежащие к системному глобальному классу, такие как поля редактирования или окна со списком. Например, приложение может поделить на подклассы поля редактирования, чтобы воспрепятствовать приему некоторых символов органом управления. Однако Вы не можете делить на подклассы окно или класс, который принадлежит другому приложению. Все деление на подклассы должно быть выполнено в пределах одного и того же процесса.Прикладная программа делит на подклассы окна, заменяя адрес первоначальной оконной процедуры адресом новой оконной процедуры, называемой
процедурой подкласса (subclass procedure). После этого процедура подкласса принимает любые сообщения, переданные или поставленные в очередь окна.Процедура подкласса после приема сообщения может предпринять три действия: она может передать сообщение первоначальной оконной процедуре, изменить сообщение и передать его первоначальной оконной процедуре, или обработать сообщение и не переправлять его первоначальной оконной процедуре. Если процедура подкласса обрабатывает сообщение, она может поступить таким образом до того, после того, или и до того и после того, как она переправит сообщение первоначальной оконной процедуре.
Windows предусматривает два типа деления на подклассы: экземплярный (
instance) и глобальный (global). В экземплярном делении на подклассы (instance subclassing), прикладная программа заменяет адрес оконной процедуры отдельного экземпляра окна. Приложение должно использовать экземплярное деление на подклассы, чтобы делить на подклассы существующее окно. В глобальном делении на подклассы (global subclassing), прикладная программа заменяет адрес оконной процедуры в структуре WNDCLASS класса окна. Все последующие окна, созданные классом имеют адрес процедуры подкласса, но существующие окна класса этим не затрагиваются.