Глобальное деление на подклассы


Чтобы произвести глобальное деление на подклассы класс окна, прикладная программа должна иметь дескриптор окна класса. Приложение нуждается в дескрипторе также и для того, чтобы удалить подкласс. Чтобы получить дескриптор, прикладная программа обычно создает скрытое окно класса, которое будет поделено на подклассы. После получения дескриптора, программа вызывает функцию SetClassLong, задавая дескриптор, флажок GCL_WNDPROC и адрес процедуры подкласса. Функция SetClassLong возвращает адрес первоначальной оконной процедуры для класса.

Адрес первоначальный оконной процедуры в глобальном делении на подклассы используется таким же образом, как он используется в экземплярном делении на подклассы. Процедура подкласса передает сообщения первоначальной оконной процедуре путем вызова функции CallWindowProc. Прикладная программа удаляет подкласс из класса окна путем вызова функции SetClassLong снова, задавая адрес первоначальной оконной процедуры, флажка GCL_WNDPROC и дескриптора окна класса, поделённого на подклассы. Приложение, которое делает глобальное деление на подклассы класс элементов управления, должно удалить подкласс, когда прикладная программа заканчивает работу; иначе может произойти неисправимая системная ошибка.

Глобальное деление на подклассы имеет те же самые ограничения как экземплярное деление на подклассы, плюс некоторые дополнительные ограничения. Прикладная программа не должна использовать дополнительные байты или для класса или для экземпляра окна без точного знания, как первоначальная оконная процедура использует их. Если приложение должно данные связать с окном, оно должно использовать свойства окна.

Назад в оглавление
На главную страницу

Hosted by uCoz