Экземплярное деление на подклассы


Прикладная программа делит на подклассы экземпляр окна, используя функцию SetWindowLong. Приложение передает в SetWindowLong флажок GWL_WNDPROC, дескриптор окна, которое делится на подклассы, и адрес процедуры подкласса. Процедура подкласса может постоянно находиться или в исполняемой прикладной программе или динамически подключаемой библиотеке (DLL).

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

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

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

Когда прикладная программа делит на подклассы, поделенное на подклассы окно, она должна удалять, деления на подклассы в обратном порядке, как они были выполнены. Если порядок удаления не является обратным, может произойти неисправимая системная ошибка.

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

Hosted by uCoz