Дочерние окна

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

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

Поэтому для доступа к полям дескрипторов разработчику предоставляются функции SetClassLongPtr(), GetClassLongPtrC), SetWindowLongPtrC) и GetWindowLongPtr(). Функции, обеспечивающие чтение дескриптора класса, например UL0NG_PTR GetClassLongPtr (HWND hWnd. int nlndex), имеют по два параметра. Они принимают дескриптор окна и константу, идентифицирующую поле структуры. При регистрации класса функция Regi sterClassEx() возвращает идентифицирующее класс число типа АТОМ. Но для поиска дескриптора класса достаточно манипулятора HWND, так как каждому окну соответствует единственный класс.

Имена констант, которые передаются вторым параметром, составлены из префикса и названия требуемого поля структуры WNDCLASSEX. Для полей, являющихся указателями, используется префикс GCLP_ - GCLP_HBRBACKGROUND, GCLP_HCURSOR GCLP_WNDPROC и т. д. Количество дополнительных байт, включенных в дескрипторы класса и окна, задается при помощи префикса GCL_ - GCL_CBCLSEXTRA и GCL_CBWNDEXTRA. Кроме полей WNDCLASSEX можно получить идентификатор класса, передав в качестве параметра константу GCW_AT0M.

В функциях записи в дескриптор дополнительно указывается новое значение поля. Изменение полей дескриптора функциями записи называется созданием подкласса окна. Сделанные функциями SetClassLongC) и SetClassLongPtr() изменения будут учитываться при создании новых окон и не повлияют на ранее созданные окна данного класса.


⇐ Предыдущая| |Следующая ⇒